awk – 필드단위로 패턴처리 할때 사용하는 스크립트
참조 : awk wiki
awk 는 위 이미지와 같이 정형화된 규칙을 가진 문서에서 필드별 패턴을 구분하여 보여줄때 사용하는 스크립트입니다.
저는 주로 위 이미지처럼 access_log 를 분석할때 자주 사용하며, 이 외에도 awk 는 쉘 스크립트 작성때도 많이 사용됩니다.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 고객에 트래픽 로그 뽑아 줄때 사용 [root@server ~]# cat 1.txt | grep -r POST | awk '{print $2 " : " $5 "] : " $8 " : " $12 " : "$11/1048576,"MB"}' > 1.POST_log.txt [root@server ~]# cat 1.txt | grep -r GET | awk '{print $2 " : " $5 "] : " $8 " : " $12 " : "$11/1048576,"MB"}' > 1.GET_log.txt [root@server ~]# cat 1.txt | awk '{print $2 " : " $5 "] : " $1$8 " : " $12 " : "$11/1048576,"MB"}' > 2.txt [root@server ~]# cat 2.txt | awk '{print $1 }' | sort | uniq -c | sort -r > 3.txt [root@server ~]# cat 2.txt | awk '{print $1 }' | sort | uniq -c | awk '{print $2}' | sort > 4.txt [root@server ~]# cat 2.txt | awk '{print $5 }' | sort | uniq -c | sort -r > 5.txt [root@server ~]# cat 2.txt | awk '{sum +=$9} END {print sum,"MByte" }' # 현재 접속자 볼때 [root@server ~]# netstat -n|grep -F :80|awk '{print $5}'|sed 's/:[0-9]*//'|sort -u|wc -l # 1000k 이상 파일 찾아서 이쁘게 볼때 [root@server ~]# find . -size +1000k -ls|awk '{print sprintf("%.1f", $7/1024/1024)"MB\t\t"$11}'|sort -n 등등등... |
[table caption=”awk 필드 변수” colwidth=”100|” colalign=”center|left”]
필드명 , 설명 , 사용방법
$0 , 모든 필드 (레코드 값 그대로) , awk ‘{print $0}’
$1 , 첫번째 필드 , awk ‘{print $1}’
$2 , 두번째 필드 , awk ‘{print $2}’
$(NF-2) , 끝에서 세번째 필드 , awk ‘{print $(NF-2)}’
$(NF-1) , 끝에서 두번째 필드 , awk ‘{print $(NF-1)}’
$NF , 마지막 필드 , awk ‘{print $NF}’
[/table]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
[root@server ~]# awk --help Usage: awk [POSIX or GNU style options] -f progfile [--] file ... Usage: awk [POSIX or GNU style options] [--] 'program' file ... POSIX options: GNU long options: -f progfile --file=progfile -F fs --field-separator=fs -v var=val --assign=var=val -m[fr] val -O --optimize -W compat --compat -W copyleft --copyleft -W copyright --copyright -W dump-variables[=file] --dump-variables[=file] -W exec=file --exec=file -W gen-po --gen-po -W help --help -W lint[=fatal] --lint[=fatal] -W lint-old --lint-old -W non-decimal-data --non-decimal-data -W profile[=file] --profile[=file] -W posix --posix -W re-interval --re-interval -W source=program-text --source=program-text -W traditional --traditional -W usage --usage -W use-lc-numeric --use-lc-numeric -W version --version To report bugs, see node `Bugs' in `gawk.info', which is section `Reporting Problems and Bugs' in the printed version. gawk is a pattern scanning and processing language. By default it reads standard input and writes standard output. Examples: gawk '{ sum += $1 }; END { print sum }' file gawk -F: '{ print $1 }' /etc/passwd |