쉘에서는 다른 스크립트 언어에서 다루는 것처럼 아주 많은 문자열을 조작할 수 있는 기능을 제공합니다.


문자열의 길이(length) 구하기

        vStr="abcdefghijk"
        echo ${#vStr}

문자열 조각(substring) 구하기
용법 : ${string:position}  -> $string의 $position부터의 문자열을 추출
          ${string:position:length} -> $string의 $position부터 $length만큼의 문자열을 추출

         vStr="123abc!@"
         echo ${vStr:3} -> "abc!@"
         echo ${vStr:3:3} -> "abc"

문자열 삭제(remove)하기
용법 : ${string#substring} -> $string의 앞 부분에서부터 가장 짧게 일치하는 $substring을 삭제
          ${string##substring} -> $string의 앞 부분에서부터 가장 길게 일치하는 $substring을 삭제
          ${string%substring} -> $string의 뒷 부분에서부터 가장 짧게 일치하는 $substring을 삭제
          ${string%%substring} -> $string의 뒷 부분에서부터 가장 길게 일치하는 $substring을 삭제

        vStr="123abc!@123456abc"
        echo ${vStr#1} -> "23abc!@123456abc"
        echo ${vStr#1*a} -> "bc!@123456abc" => 1과 a사이에서 가장 짧게 일치되는 부분을 삭제
        echo ${vStr##1*a} -> "bc" => 1과 a사이에서 가장 길게 일치되는 부분을 삭제
        echo ${vStr%a*c} -> "123abc!@123456"
        echo ${vStr%%a*c} -> "123"

문자열 대치(replace)하기
용법 : ${string/substring/replacement} -> 처음 일치하는 $substring을 $replacement로 대치.
          ${string//substring/replacement} -> 일치하는 모든 $substring을 $replacement로 대치.
          ${string/#substring/replacement} -> $substring이 $string의 맨 앞에서 일치하면 $replacement로 대치.
          ${string/%substring/replacement} -> $substring이 $string의 맨 뒤에서 일치하면 $replacement로 대치.

        vStr="123abc!@123456abc"
        echo ${vStr/123/ABC} -> "ABCabc!@123456abc"
        echo ${vStr//123/ABC} -> "ABCabc!@ABC456abc"
        echo ${vStr/#123/ABC} -> "ABCabc!@123456abc"
        echo ${vStr/%abc/ABC} -> "123abc!@123456ABC"


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
<쉬어 가는 코너>

sort | uniq를 사용합니다.

그러나, 위 명령보다는 sort -u가 I/O 소모가 덜합니다.

기왕 사용하는 거 효율적인 방법으로 사용하는게 좋겠죠?


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

쉘에서 문자열을 치환하는 방법은 여러가지 방법이 존재합니다.
그 중에 대표적인 방법 2가지를 살펴보도록 합니다.

1. tr (translate)를 사용합니다.
문자열을 변환하거나 삭제하기 위한 간단한 변환기입니다.
먼저, 변환하는 방법에 대해서 살펴보겠습니다.

용법 : tr 'A' 'B'  -> translate A to B
예제
    - echo 'This is a that' | tr 'This' 'That' -> That at a that
      a) "is"가 전부 "at"으로 변환됨에 주의하세요.

    - echo 'THIS IS A THAT' | tr '[A-Z]' '[a-z]' -> this is a that
      a) 대문자를 소문자로 변환합니다.
      b) echo 'THIS IS A THAT' | tr '[:upper:]' '[:lower:]'와 동일합니다.

    - echo 'THIS        IS A THAT' | tr '\t' ' ' -> THIS IS A THAT
      a) tab 문자를 하나의 공백으로 변환합니다.
      b) echo 'THIS      IS A THAT' | tr '[:blank:]' ' '와 동일하지만 [:blank:]는 tab 문자 뿐만 아니라, 공백 문자도 처리하게 됩니다.

다음은 삭제하는 방법에 대해서 살펴보겠습니다.
용법 : tr -d 'A' -> translate A to ''
예제 : echo 'THIS IS A THAT' | tr -d 'A' -> THIS IS THT

2. sed를 사용합니다.
문자열의 스트림을 변경할 때는 sed를 사용합니다.
위 예제를 sed로 변경해 보도록 하겠습니다.

예제
    - echo 'This is a that' | sed 's/This/That/g' -> That is a that
      a) 위 예제와 결과에 차이가 있습니다. "This"와 매칭되는 문자

    - echo 'THIS IS A THAT' | sed 's/\(.*\)/\L\1/'-> this is a that
      a) echo 'this is a that' | sed 's/\(.*\)/\U\1/' -> THIS IS A THAT

    - echo 'THIS      IS A  THAT' | sed 's/\t/ /g' -> THIS IS A THAT
      a) tab 문자를 하나의 공백으로 변환합니다.

    - echo 'THIS IS A THAT' | sed 's/A//g' -> THIS IS THT
      a) A 문자를 없앱니다

좀 더 세부적인 문자열을 다루는 것은 실전에서는 tr보다는 sed를 많이 쓰는 경향이 있습니다.

조만간 sed에 대한 정리를 한 번 하면 좋을 거 같네요^*

블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

shell에서 Array를 어떻게 사용 할까요?
shell에서 Array를 사용 할 수 있긴 할까요?

기본 sh에서는 딱히 방법이 없습니다.
그러나, 배열처럼 사용할 수는 있지요.

#!/bin/sh

vArray="A,B"

for i in `echo ${vArray} | tr ',' '\n'` ; do
   echo ${i}
done

위 결과는 다음과 같이
A
B
로 나옵니다.

"tr"은 문자열 변환, 삭제에 사용하는 명령어인데, 이 명령어를 사용하면 마치 Array에서 가져오는 것처럼 사용할 수는 있으나, direct access는 힘듭니다.
위 프로그램은 vArray 변수를 출력하면서 "," -> "\n"로 변환하여 한 라인씩 처리하기 위함입니다.

기본 shell에서는 안되지만, POSIX 계열인 bash에서는 사용 가능합니다.
#!/bin/bash

declare -a vArray

vArray=("A" "B")
vArraySize=${#vArray[@]}
vNo=0

while [ $vNo -lt $vArraySize ]
do
        echo ${vArray[$vNo]}
        vNo=`expr $vNo + 1`
done

unset vArray

vArray에서 ""로 값들을 나열하고 있으며,  vArray의 size도 구할 수 있습니다. ${#vArray[@]}
sh에서 안 되는 direct access도 가능합니다. ${vArray[$vNo]}
Array 변수 사용은 반드시 괄호를 사용해야 합니다.
그리고, 1차원 배열은 지원합니다.
declare와 unset은 사용하지 않아도 됩니다.

이런 Array를 함수의 인자로도 전달 가능할까요?

#!/bin/bash

vArray1=("A" "B")
vArray2=("C" "D")


#-------------- [print_array function] -----------------
print_array()
{

        vArray=("${!1}")
        vArraySize=${#vArray[@]}
        vNo=0

        while [ $vNo -lt $vArraySize ]
        do
                echo ${vArray[$vNo]}
                vNo=`expr $vNo + 1`
        done

}

echo "================="
print_array vArray1[@]
print_array vArray2[@]

vArray1=(${vArray1[@]} "a")
unset vArray2[1]

echo "================="
print_array vArray1[@]
print_array vArray2[@]

위의 결과는 다음과 같습니다.
=================
A
B
C
D
=================
A
B
a
C

함수를 호출할 경우에는 함수명 뒤에 vArray[@], 함수 내에서는 ("${!1}")로 표현해야 합니다.
함수 내에서 사용하는 표현이 약간 어렵죠? 그냥 외웁시다.
참고로, 표현 내의 숫자("${!1}")는 몇 번째 인자인지 나타냅니다.

${vArray[@]}은 배열 전체를 의미합니다.
${#vArray[@]}은 배열의 크기를 의미합니다.

위 프로그램에서 배열에 값을 추가하고 삭제하는 표현도 두었습니다.
배열에 값을 추가하는 것은 vArray=(${vArray[@]} "a")
배열에 값을 삭제하는 것은 unset vArray[1]

쉘에서도 배열을 자유자재로 사용한다면 프로그래밍이 쉬워지지 않을까요?


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
#!/bin/sh

# 현재 디렉토리(./)에서 *.* 형태가 아닌(! -iname "*.*") 파일 찾기  
LISTS=`find ./ -type f ! -iname "*.*"`
END=0
START=0
 
for filename in $LISTS
do
        # 파일명의 길이 획득
        END=${#filename}
        START=`expr $END - 2`
 
        # 파일명의 끝 두 자리를 디렉토리명으로 지정
        DIR=${filename:$START:$END};
 
        echo "$filename ::: $DIR";
done
 
exit 0

'IT > shell 위 댄스' 카테고리의 다른 글

쉘에서 문자열 치환하기  (0) 2017.04.05
쉘에서 배열 사용하기  (0) 2017.04.03
배열 활용  (0) 2008.02.27
파일 처리  (0) 2008.02.27
awk  (0) 2008.02.27
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

배열 활용

IT/shell 위 댄스 2008. 2. 27. 19:03
#!/bin/sh
SN_PID=`ps --cols=100 -aef | grep "search_node CUVE_s0_sn0" | grep -v "grep" | awk '{ printf("%s\n", $2); }'`
if [ $SN_PID"p" == "p" ]; then
       SN_PPIDS=`ps --cols=100 -aef | grep search_noded | grep -v "grep" | awk '{ printf("%s\n", $3); }'`
       SN_CIDS=`ps --cols=100 -aef | grep search_noded | grep -v "grep" | awk '{ printf("%s\n", $2); }'`
       nNum=0;
       for pid in $SN_PPIDS
       do
               SN_PPIDS_ARR[$nNum]=$pid;
               nNum=`expr $nNum + 1`
       done
       nNum=0;
       for cid in $SN_CIDS
       do
               if [ ${SN_PPIDS_ARR[$nNum]} -eq 1 ]; then
                       echo "kill .... [$cid]"
                       kill -9 $cid
               fi
               nNum=`expr $nNum + 1`
       done
fi
exit 0


--> 이것보다 더 쉬운 방법???
ps --cols=100 -aef | awk '{ if(($3 == 1) && (index($8, "search_noded") != 0)) { system("kill -9 " $2); } }'

'IT > shell 위 댄스' 카테고리의 다른 글

쉘에서 배열 사용하기  (0) 2017.04.03
디렉토리에서 확장자가 없는 파일 찾기(find, ${#변수명}, ${변수명:n:m})  (0) 2008.10.07
파일 처리  (0) 2008.02.27
awk  (0) 2008.02.27
date 매뉴얼  (0) 2008.02.27
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

파일 처리

IT/shell 위 댄스 2008. 2. 27. 19:01
[ 파일 다루기 ]

[ -f 파일명 ] : 파일이 있는 경우
[ -s 파일명 ] : 파일이 존재하고 내용이 있는 경우
[ -d 파일명 ] : 파일이 아니고, 디렉토리인 경우
[ -r 파일명 ] : 읽기가 가능한 파일인 경우
[ -w 파일명 ] : 쓰기가 가능한 파일인 경우
[ -x 파일명 ] : 파일이 존재하고 실행 가능한 경우
[ ! -옵션 파일명 ] : 옵션의 조건이 아닐 경우



[ 파일 내용 수정하기 ]

#!/bin/csh

set FILENAME=$1
ed $FILENAME <<EOF
1,\$s/^host /#host /
.
w
q
EOF


[ 하위 디렉토리 안의 파일 내용 모두 수정하기 ]

#!/bin/sh

for i in `grep 경북 * -rls`
do

   (vim -c :%s/경북/경상북도/g -c :wq $i);

done


exit 0

******

vi에서 -c 옵션을 사용하면 파일을 열면서 동시에 지시한 vi 명령을 수행한다.

'IT > shell 위 댄스' 카테고리의 다른 글

디렉토리에서 확장자가 없는 파일 찾기(find, ${#변수명}, ${변수명:n:m})  (0) 2008.10.07
배열 활용  (0) 2008.02.27
awk  (0) 2008.02.27
date 매뉴얼  (0) 2008.02.27
쉘로 작성한 ftp 활용  (0) 2008.02.27
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

awk

IT/shell 위 댄스 2008. 2. 27. 18:59

[ 사용법 ]
 
  awk 은 설계자인 Aho, Weingrger, Kernighan의 첫글자로 명명되어진 패턴검색과
  처리 기능을 가진 인터프리티드 프로그래밍 언어로서 필터링, 치환, 간단한 리포팅 작업을 제어할수 있다.

1) "awk" 형식
     awk 프로그램은 세부분으로 구성되어 진다.
            BEGIN Section : 파일을 읽기전에 실행
            Pattern Statment Section : 파일의 각 레코드 라인을 읽어들일 때 마다 실행
            END Section : 파일을 다 읽어들인 뒤 실행

            BEGIN { statements ….}
                       /pattern expression / { statements  .... }
           END { statements… }

     여러개의 statement를 한 라인에 쓸때는 statement ; statement 의 형식으로 기술한다.

2) awk 명령어 실행 방법
     "awk" 프로그램을 명령어 상에서 입력하는 경우
     $ awk '{print $0 }' datafile ....

     단일인용문( ' ' ) 안에 프로그램을 기술한다. 데이터 파일을 정의하지 않으면 표준 입력으로부터 데이터를 입력 받는다.
     awk 프로그램을 파일로 작성하는 경우는
     $ awk -f awk-program-filename data-filenames
     ex)
        $ awk ' BEGIN { print "awk 프로그램 실행 연습입니다" } '
        $
        $ awk '{ print $1, $2 } ' data1
          100 200
          300 400
          500 600
       $
       $ cat ex01
        # This is sample file
        BEGIN {
            print "Hello, I'm Kim "
           exit }
      $
      $ awk -f ex01
         Hello, I'm Kim
      $


  3) 레코드
     레코드는 입력된 파일의 한 줄을 말한다. 라인 전체의 내용은 $0 변수명으로 사용되며,
     입력된 레코드 번호는 NR 이라는 변수로 표시 된다.

  4) 필드
     입력된 레코드에서 스페이스 또는 탭으로 구분되는 문자들을 말한다.
     각각의 필드는 $1,$2,$3,....$n 으로 필드위치에 따라 변수명으로 표기되며 현재 필드값은 NF 변수로 표시된다.

  5) 변수
     위치변수 는 필드 또는 레코드를 나타낸다.
     $0 : 현재 입력된 레코드를 나타내는 변수
     $1 : 현재 입력된 레코드의 첫 번째 필드를 나타내는 변수
     $n : 현재 입력된 레코드의 n번째 필드를 나타내는 변수
   
     재정의 변수는 입력된 레코드의 구성과 크기에 대한 정보를 제공한다.
       NR : 레코드 수
       NF : 필드 수
       FS : 필드 구분 문자
       RR : 레코드 구분 문자
       OFS : 출력 필드 구분 문자
       ORS : 출력 레코드 구분 문자
       FILENAME : 현재 입력된 파일 이름
      OFMT : 출력 인쇄 형식
     사용자 정의 변수는 프로그램의 어느 곳에서도 사용자가 정의하여 사용 할 수 있으며, 숫자 또는 문자열 값을 가진다.
     초기화 하지 않으면 자동적으로 null(0) 문자를 가진다.
     ex)
       $ cat data1
       100 200
       300 400
       500 600
       $ cat ex02
         BEGIN { OFS="------" }
         { print $1,$2 }
       $
       $ awk -f ex02 data1
        100------200
        300------400
        500------600
      $
      $ cat ex03
        { x = $1 + $2
           y = y + x }
        END { print y }
      $
      $ awk -f ex03 data1
       1600
      $

  6) 패턴 과 연산자
      패턴의 형식은 egrep과 유사한 형식을 가진다.
     정규식을 사용하여 패턴을 구성할 수 있으며 패턴은 "/ /" 형식으로 지정한다.
      "/ /,/ /" 형식을 사용하여 패턴으로 범위를 지정할 수 있다.
     ex)
       $ cat ex04
       $2 ~ /^[0-9]+$/ { print $2 }
        -> 두 번째 필드가 숫자로만 구성되어 있으면 두 번째 필드값을 출력
       $ awk -f ex04 data1
         200
         400
         600
       $
       $ cat ex05
       $0 ~ /[Ee]nd/ { print "end of", FILENAME }
       $
       -> 읽어 들인 레코드의 값이 End 또는 end이면 "end of data1" 과 같은 형식으로 출력
       $ cat ex05_1
          /Begin/,/End/ { total += $1 }
          END { print "Total = " total }

       연산자는 관계연산자, 패턴 연산자, 산술연산자, 지정 연산자, 복합지정연산자, 증감연산자 가 있다.
       관계연산자는 숫자 또는 스트링 값을 비교할 때 사용한다.
         ==            같다
         !=           같지 않다
         >             크다
         <              작다
         >=            크거나 같다
         <=            작거나 같다

        ex)
          NF != 5 { print "필드수가 5개가 아님"}
          $1 >= 10000 { print "첫번째 필드값이 10000 보다 크거나 같다" }
          $1 >= "s" { print " 첫 번째 필드가 s 보다 뒷문자(tuvw..)이다"}
          $1 < $2 { print "두번째 필드 값이 첫 번째 필드 값보다 크다"}

          패턴연산자는 스트링 패턴과의 일치 여부를 비교할 때 주로 사용 된다.
             ~             패턴과 일치
             !~           패턴과 같지 않다.
         ex)
           $1 !~ /^[0-9]+$/ { print "첫번째 필드가 숫자가 안니다" }
           $2 ~ /korea/ { print "두번째 필드값이 korea 이다"}

         산술연산자는 수식 계산에 사용된다
           +             더하기
           -             빼기
           *             곱하기
           /             나누기
          %             나누어서 남은 나머지
         지정 연산자는 오른쪽 값을 왼쪽 변수에 대입한다
          =             지정연산
         ex) a = 10
        복합 지정 연산자는 산술연산자와 지정연산자를 결합해서 사용한다
        += , -=, *=, /=, %=
        ex) a += 5 : a = a + 5 와 같은 문장이다.
        증감 연산자는 값을 1씩 증가하거나 감소 시킬 때 사용한다
        ++           1 증가
        --           1 감소
        ex)
          $ cat ex06
             END { a = 0
                       print "a++ = ", a++
                       print "a-- = ", a--
                       exit
            }
          $ cat ex07
              BEGIN { a = 0 }
          $1 > 100 { a++ }
              END { print "첫번째 필드의 값이 100보다 큰 경우는 ", a, "번입니다" }
          $
          $ awk -f ex07 data1
          첫번째 필드의 값이 100보다 큰 경우는 2 번입니다


  7) 출력문
     print 문은 출력하고자하는 문자열은 "출력내용" 의 형식으로, 변수값은 변수명을 사용하여 출력한다.
     " , " (쉼표)는 "print"문 안에서 필드를 구분한다. "" 사이의 문자열은 하나의 필드로 취급된다.
    출력방향을 조정하기위해 " > " 문자와 " >> " 문자를 사용할수 있다. 출력될 파일이름은 인용부호("")안에서 사용한다.
    ex)
    $ cat ex08
    { print $1,$2 > "sample"}
    $
    $ awk -f ex08 data1
    $ cat sample
    100 200
    300 400
    500 600
    "printf" 문을 사용하여 출력 양식을 지정할 수 있다.
   사용형식은 printf "format",expression1, expression2,..... 이다.
   format에서 변환사양은 % 기호를 붙여서 표시한다
   %d            십진수
   %o            8진수
   %x            16진수
   %s            문자열
   %f            소수
   %e            지수를 사용한 소수
   %g            %f,%e중 짧은 형태의 출력을 사용한다.
   ex)
   $ cat ex09
   $1 ~ /^[0-9]+$/ { printf "첫번째 필드 값은 %d 입니다\n",$1 }
   $
   $ awk -f ex09 data1
    첫번째 필드 값은 100 입니다
    첫번째 필드 값은 300 입니다
    첫번째 필드 값은 500 입니다
   $
     파이프(|)를 사용하여 " print"문의 출력을 UNIX 시스템 명령어의 입력으로 사용할 수 있다.
     awk 안에서 유닉스 명령과 인수를 사용하는 경우는 인용부호(" ")로 묶어서 사용한다.
   $ cat ex09
     END { print " Pipe Test ...Is it OK? " | "mail guest" }
   $
   $ awk -f ex08 data1
   $ login guest
     Welcome to guest account
    You have mail

  8) 프로그래밍 언어 구조 제어문들
  " if " 문
   ex)
    { if ( $1 < 100 && $2 > $3 )
        { print "첫번째 필드값이 100보다 작고 두 번째 필드값이 세 번째 필드값 보다 큽니다" }
    }
   ex)
    { if ( $1 > 100 || $2 >100 )
        { print "첫번째 필드값이 100보다 크거나 두 번째 필드값이 100보다 큽니다" }
    }
 
  " while " 문
    { i = 1
       while ( i <= NF )
          { print "필드수가 1개보다 작거나 같습니다" }
    }

   " for " 문
   ex)
    $ cat ex10
     { for ( a = 1 ; a <= NF ; a++ ) print NR,a ,$a }
    $ awk -f ex10 data1
     1 1 100
     1 2 200
     2 1 300
     2 2 400
     3 1 500
     3 2 600
   $
   " break "문은 순환문의 수행을 중지 시키고 순환문 밖의 문장을 수행한다
   " continue "문은 순환문의 수행을 중지하고, 순환문의 처음 조건을 테스트한다.
   " next " 문은 다음 입력 레코드를 읽어 들이고 프로그램 수행은 패턴문의 처음을 수행한다.
   " exit " 문은 프로그램 실행을 종료한다
   ex)
   $ cat ex11
     { for ( n = 1; ; n++ )
         { if ( n <= NF ) { print NR, n, $n
            continue }
          break
     } }
   $
   $ cat ex12
     NF > 2 { print NR, NF; next }
   $
   $ cat ex13
   $1 > 100 { print NR, " $2= ", $2, "$2값 오류"
     exit 99 }
   $

  9) awk에서 많이 사용되는 함수들
    " length " 함수는 주어진 문자열의 문자 개수를 반환한다. length 함수에 인수가 없으면 현재 입력 레코드의 문자수를 반환한다.
    $ cat ex14
     { print NR, "입력된 문자열의 문자수는 " , length, "개입니다" }
   $
   $ cat ex15
     { print NR, "첫번째 필드의 문자수는 ", length($1), "개입니다" }
   $
     " substr " 함수는 지정한 문자열에서 원하는 개수 만큼의 문자들을 추출하여 반환한다
   $ cat ex16
     BEGIN {
          print substr("Happy Birthday",7,9)
          exit }
    $ awk -f ex16
     Birthday
     " index " 함수는 문자열에서 지정하는 문자열이 있는 위치를 나타낸다.
     문자열에서 지정한 문자열이 포함되어 있지 않은 경우는 0 값을 반환한다.
    $ cat ex17
      BEGIN {
            print index("Hello This is Kim","This")
            exit
      }
    $ awk -f ex17
      7
    $
      " sprintf " 함수는 printf함수와 사용방법이 유사하지만 출력의 방향이 지정연산자의 왼편에 있는 변수명이다.
    $ cat ex18
     { var = sprintf("출력연습 : 첫 번째 필드 : %d ",$1)
        print var
     }
   $
   $ awk -f ex17 data1
     100
     300
     500
   $

  ※ awk 함수들

 

  •  문자열 연산
    •  gsub(reg,s)
      입력 문자열의 전반에 걸쳐 정규표현식 r을 문자열 s로 대치한다
    • gsub(reg,s1,s2)
      문자열 s2에서 정규표현식 r을 s1으로 대치한다 
    • index(s1,s2)
      s1에서 s2의 위치를 넘겨준다  만약 없다면 0을 넘겨준다 
    • length(arg)
      인자의 길이를 넘겨준다 
    • match(s,r)
      문자열 s에서 정규표현식 r과 매칭되는 부분의 위치를 넘겨준다 
    • split(string,array[,seperator])
      구분자를 기준으로(지정하지 않으면 공백 기준)해서 지정한 문자열을 배열로 만든다  배열[1],  배열[2], ....... 
    • sub(r,s),  sub(r,s1,s2)
      gsub과 동일하다
      단지 정규표현식과 일치하는 문자열이 여러개라도 처음 문자열만 대치된다
    • substr(s,m)
      문자열 s에서 m번째 위치에서 끝까지의 문자를 리턴한다 
    • substr(s,m,n)
      문자열 s에서 m번째 위치에서 n번째까지의 문자를 리턴한다 
    • tolower(str)
    • toupper(str)
  • 수치 연산
    • atan2(x,y)
      y/x의 arctangent값을 라디안 단위로 넘겨준다 
    • cos(x)
    • exp(arg)
    • int(arg)
    • log(arg)
    • rand()
      0과 1사이의 난수를 발생한다 
    • sin(x)
    • sqrt(arg)
    • srand(expr)
      인자를 가지고 난수를 발생한다
      인자가 주어지지 않으면 시간을 가지고 난수를 발생한다 
  • 입출력/프로세스
    • close(filename)
      지정한 파일을 닫는다 
    • close(cmd)
      지정한 명령어 파이프를 닫는다 
    • delete array[element]
      지정한 배열 요소를 지운다 
    • getline()
      다음 레코드를 읽어 들인다 
    • getline[variable] [< "filename"]
      파일에서 읽어들인다 
    • next
      다음 레코드(라인)을 입력받는다
      getline()과 유사하지만 /패턴/동작을 새롭게 시작한다
      getline()은 다음 라인을 읽기만 한다 
    • print [args] [> "filename"]
      인자를 출력한다 
    • printf "format" [,expressions] [> "filename"]
      형식에 맞춰 출력한다 
    • sprintf (format [,expressions])
      printf와 마찬가지로 사용하는데 값을 리턴하기만 하고 출력은 하지 않는다 
    • system(command)
      시스템 내부 명령어를 실행한다
  • 'IT > shell 위 댄스' 카테고리의 다른 글

    배열 활용  (0) 2008.02.27
    파일 처리  (0) 2008.02.27
    date 매뉴얼  (0) 2008.02.27
    쉘로 작성한 ftp 활용  (0) 2008.02.27
    sed  (0) 2008.02.27
    블로그 이미지

    쩐의시대

    나답게 살아가고 나답게 살아가자

    ,

    date 매뉴얼

    IT/shell 위 댄스 2008. 2. 27. 18:57
    %      % 문자 그 자체
    n      줄바꿈
    t      수평 탭

     시간 필드:
     %H     시 (00..23)
    %I     시 (01..12)
    %k     시 ( 0..23)
    %l     시 ( 1..12)
    %M     분 (00..59)
    %p     로케일의 AM 또는 PM
    %r     시간, 12-시간제 (hh:mm:ss [AP]M)
    %s     1970-01-01 00:00:00 UTC (비표준 확장기능)로 부터 경과된 초
    %S     초 (00..61)
    %T     시간, 24-시간 (hh:mm:ss)
    %X     로케일에서 정의한 시간 표현(%H:%M:%S)
    %Z     시간대 (에, EDT), 시간대를 결정할 수 없는 때는 아무 값도 출력하지 않는다.

     날짜 필드:
    %a     로케일의 약식 요일 이름 (Sun..Sat)
    %A     로케일의 완전한 요일 이름, 가변 길이 (Sunday..Saturday)
    %b     로케일의 약식 월 이름 (Jan..Dec)
    %B     로케일의 완전한 월 이름, 가변 길이 (January..December)
    %c     로케일의 날짜와 시간 (Sat Nov 04 12:02:33 EST 1989)
    %d     월 중 일 (01..31)
    %D     날짜 (mm/dd/yy)
    %h     %b 와 동일
    %j     연 중 일 (001..366)
    %m     월 (01..12)
    %U     연 중 주 번호, 일요일을 주의 첫번째 날로 생각 (00..53)
    %w     요일 번호 (0..6), 0 은 일요일
    %W     연 중 주 번호, 월요일을 주의 첫번째 날로 생각 (00..53)
    %x     로케일의 날짜 표현식 (mm/dd/yy)
    %y     연 중 일의 마지막 두 숫자 (00..99)
    %Y     연 (1970...)

     기본적으로, date 은 숫자 필드를 0 으로 채운다.  GNU date 는 다음과 같은 비표준 수치 변형자를 인식한다:
    -      (하이픈) 필드를 채우지 않는다.
    _      (언더스코어) 필드를 공백으로 채운다.

     `+'로  시작하지  않는  인수가  있다면, date 는 시스템 시계를 주어진 시간과 날짜로 설정한다.  인수는 모두 숫자로
    구성되어 있으며 다음과 같은 의미를 지닌다:

     MM     월
    DD     월 중 일
    hh     시
    mm     분
    CC     연도의 처음 두 숫자 (선택적)
    YY     연도의 나중 두 숫자 (선택적)
    ss     초 (선택적)

     오로지 수퍼유저만 시스템 시계를 변경할 수 있다.

     옵션
    -d datestr, --date datestr
           datestr 에서 지시한 대로 시간과 날짜를 출력한다.  이 형태는  거의  모든  공통  형식을  사용할  수  있다.
           출력은 기본적인 출력 형식을 띠거나 `+' 로 시작하는 인수가 있을 때 date 는 인수에서 주어진 대로 출력한다.

     --help 표준출력으로 사용법을 출력하고 정상적으로 종료한다.

     -s datestr, --set datestr
           시간과 날짜를 datestr로설정하며그형식은거의모든공통형식을사용할수있다.  월 이름,  시간대,  `오전',`오후'
           등을 포함할 수 있다.

     -u, --universal
           시간과  날짜를  지역  시간이  아니라  Coordinated Universal Time ( 그리니치 표준시 ) 형식으로 출력하거나
           설정한다.

     --version
           표준출력으로 버전정보를 출력하고 정상적으로 종료한다.

     
    이틀 전의 날짜를 출력하기 위해서는

            date --date '2 days ago'

     3 개월하고 하루 지난 날짜를 출력하기 위해서는

            date --date '3 months 1 day'

     올해 크리스마스 날짜를 출력하기 위해서는

            date --date '25 Dec' +%j

     오늘 날짜를 완전한 월 이름, 월 중 일을 포함하는 형식으로 출력하기 위해서는

            date '+%B %d'

     하지만 처음 9 일에 대하여 '%d'는 2 자리를 맞추기 위하여 0을 채우기 때문에 예를 들어 `date -d  1-may  '+%B  %d''
    라고 하면 `May 01' 라고 출력하므로 원하는 결과가 아닐 수도 있다.

     한 자리 수 날짜에 대하여 앞에 0 이 안나타도록 하기 위해서는 비표준인 `-' 변형자를 사용하여 채움을 막는다.

            date -d 1-may '+%B %-d'

    'IT > shell 위 댄스' 카테고리의 다른 글

    파일 처리  (0) 2008.02.27
    awk  (0) 2008.02.27
    쉘로 작성한 ftp 활용  (0) 2008.02.27
    sed  (0) 2008.02.27
    string 추출  (0) 2008.02.27
    블로그 이미지

    쩐의시대

    나답게 살아가고 나답게 살아가자

    ,
    ftp -n $FTP_SERVER_IP1 << EOF
    user $FTP_SERVER_USER1 $FTP_SERVER_PASS1

      cd $FTP_PATH_SMALL_1

      mkdir small
    cd small

      mkdir $DIR_PATH1
    cd $DIR_PATH1

      mkdir $DIR_PATH2
    cd $DIR_PATH2

      mkdir $DIR_PATH3
    cd $DIR_PATH3

      binary
    put $SRC_FILE

    bye
    EOF

    'IT > shell 위 댄스' 카테고리의 다른 글

    awk  (0) 2008.02.27
    date 매뉴얼  (0) 2008.02.27
    sed  (0) 2008.02.27
    string 추출  (0) 2008.02.27
    thumbnail 생성  (0) 2008.02.27
    블로그 이미지

    쩐의시대

    나답게 살아가고 나답게 살아가자

    ,