0) prologue

    


1) awk는 ?

  : 설계자인 Aho, Weingrger, Kernighan 의 첫 글자로 명명되어진 인터프리터 프로그래밍 언어이다.

    필터링, 치환, 간단한 리포팅 작업을 할 수 있어서 편리하다.

    화면에 출력되는 내용을 열로 나누어 특정열만 뽑아내는 명령이다.(explode와 비슷)

   


2) awk의 형식 ?

  : BEGIN { ... } /Pattern Statement/ {action} END { ... }

    먼저 실행되는 부분인 BEGIN, 우리가 처리하고자 하는 작업 부분,

    그리고 프로그램을 종료할 때 쓰는 END로 이루어져 있다.


    awk [옵션] '스크립트' [-v 변수=값] [파일(들)]

    awk [옵션] -f 스크립트 파일 [-v 변수=값] [파일(들)]


    -Fc : field separator 지정

    Fc는 필드 사이를 구분하는 구분자이다

    직접 지정하지 않으면 공백을 기준으로 한다

    시스템 변수 FS를 지정하는 것과 같은 효과를 지닌다


    -v 변수 = 값

    스크립트를 실행하기 전에 미리 변수를 지정하여 준다

    $를 쓰지 않고 변수 이름만 쓰면 된다. C에서 #define처럼 생각하면 될 것이다.


    -f 스크립트 파일

    스크립트를 파일에서 가져온다

    -f 옵션을 여러번 사용하여 여러개 스크립트 파일을 동시에 불러와 지정한 파일에 적용할 수 있다


3) 필드 ?

  : 입력된 각 레코드에서 공백 문자로 구분되는 데이터들을 말한다.

    각각은 $n으로 표시되며, 전체 필드는 $0이다.


4) 자주 사용하는 함수 ?

  : length = 주어진 문자열의 문자 개수를 리턴한다.

    substr = 지정한 문자열에서 원하는 개수 만큼의 문자를 추출하여 리턴한다.

    index = 문자열에서 지정하는 문자열이 있는 위치를 나타낸다.


5) 제어문, 연산자 ?

  : for, while, if, break, continue, next, exit


6) 정규화 패턴 ?

  : /.../ 의 형식을 가짐 (ex. /^[0-9]+$/)

    /패턴/ {동작}

    커맨드 라인에서는 패턴, 동작 전체를 단일 따옴표로 묶는다

    패턴만 있는 경우 : 패턴과 일치하는 레코드(라인)를 화면에 출력한다

    동작만 있는 경우 : 모든 레코드(라인)가 동작의 대상이 된다


7) 동작 ?

    동작은 모두 { }로 둘러싸야 한다

    good이라는 문자열을 포함하는 모든 레코드를 출력할 때 /good/

    각 레코드의 첫 번째 필드를 출력할 때 { print $1 }

    good이라는 문자열을 포함하는 레코드의 첫 번째 필드를 출력할 때 /good/ { print $1 }

    두 개 이상의 필드를 가지는 레코드를 전부 출력할 때(비교연산) NF > 2

    한 라인(\n)을 필드로, 빈 라인("")을 레코드로 구분할 때 BEGIN { FS = "\n" ; RS = ""}

    첫 번째 필드가 good와 일치하는 레코드에 대해 세 번째 필드를 먼저 출력하고 두 번째 필드를

    나중에 출력하고 싶을 때 $1 ~ /good/ { print $3 , $2 }

    good이라는 문자열이 몇 개나 들어가 있는지 계산하여 마지막 부분에서 출력하고 싶을 때
    /good/ { ++x } END { print x }

    두 번째 필드를 모두 합하고 마지막 부분에서 두 번째 필드의 총합계를 출력하고 싶을 때
    { total += $2 } END { print "Total of $2: " , total }

    레코드의 길이가 20자 이하인 것을 출력하고 싶을 때 length($0) < 20

    네 개의 필드를 가지며 good이라는 단어로 시작하는 모든 레코드를 출력하고 싶을 때 NF == 4 && /^good/

    빈줄을 제외한 모든 줄을 화면에 출력한다 NF > 0


8) 변수 ?

  : NR 레코드수, NF 필드수, FS 필드구분문자, RS 레코드구분문자, FILENAME 현재파일이름


9) 출력 ?

  : print, printf, sprintf


ex)

awk 'BEGIN {print "begin"}; {print "statement"} END {print "end"}' [FILENAME]

awk ' BEGIN { for (i = 1;i<=7,i++) print int(101*rand()) }'
  : 화면에 1이상 100이하의 난수 일곱 개를 출력한다

ls -l [FILE1] [FILE2] [FILE3] | awk ' { x += $5 } ; END { print "Total bytes : " x } '
  : 파일들의 크기를 모두 합하여 총 바이트 수를 표시한다

awk ' END { print NR } ' [FILENAME]
  : 지정한 파일의 라인이 몇 개인지를 표시한다

awk ' NR % 2 == 0 ' [FILENAME]
  : 지정한 파일의 짝수번째의 라인만을 출력해 준다


적용)

tail -f [FILENAME] | awk 'BEGIN {print "start"} ($9 == 500) {print $0} END {print "end"}';
: FILENAME을 읽어서 http응답이 500인 것만 찾아서 출력한다.

tail -f [APACHE LOG] | awk '($9 != 200 && $9 != 302 && $9 != 304) {print $0}';
: APACHE LOG를 읽어서 비정상적인 응답을 찾는다.

tail -f [TOMCAT LOG] | awk '/ERROR/ {print $0}';
: TOMCAT LOG를 읽어서 오류인 부분을 찾는다.

ps -aux | awk '/httpd/ {printf "cpu usage:%.1f memory usage:%.1f\n", $3, $4}'
: httpd가 사용하는 리소스를 알아본다.

2009/09/07 19:09 2009/09/07 19:09
Posted by freeism

트랙백 주소 :: http://www.freeism.co.kr/tc/trackback/604

댓글을 달아 주세요

  1. 럴수 2009/09/09 23:50  댓글주소  수정/삭제  댓글쓰기

    잘보고감.ㅎ

  2. SID 2009/11/21 17:44  댓글주소  수정/삭제  댓글쓰기

    좋은 글 잘 보고 갑니다 ^^

  3. 초마 2009/12/14 14:59  댓글주소  수정/삭제  댓글쓰기

    많은 도움이 되었습니다. 퍼가도 될까요?^^;

이전페이지 1 ... 54 55 56 57 58 59 60 61 62 ... 179 다음페이지
사이드바 열기