2015년 1월 29일 목요일

awk 사용방법

“awk 는 유닉스에서 처음 개발된 스크립트 언어로 텍스트 형태로 되어있는 데이타를 필드로 구분하여 처리하는 기능을 기본으로 합니다. 주로 패턴검색과 조작을 통해  레포트를 만드는 등의 작업에 사용됩니다. 여기서는 awk 를 활용할 수 있는 몇가지 예제와 문법을 설명합니다. 
1. awk 활용예제
 1) date 명령의 결과값을 awk 로 년도와 월만 출력하는 보고서 형태
[root@localhost ~]# date | awk '{print "Year : "$1 "\nMonth : "$2}'
Year : 2015.
Month : 01.
2) /etc/passwd 파일을 ‘:’ 구분자로 나누어 세번째 필드 uid 가 500 이상인 경우 첫번째 필드 출력
[root@localhost ~]# cat /etc/passwd | awk -F: '$3 > 500 {print $1}'
apple
mark
kimC
3) 디스크 사용량이 10MB 이상인 경우만 출력
[root@localhost home]# du ./ | awk '$1 > 10000 {print}'
10604   ./abc/public_html/locale
33296   ./abc/public_html
41864   ./abc
4) ClamAV 스캔결과 감염된 파일에 대한 내용을 수합한 파일 test.txt 에서 전체 합계를 구하기
[root@localhost home]# cat test.txt
Infected files: 0
Infected files: 0
Infected files: 3
Infected files: 0
Infected files: 0
Infected files: 5
Infected files: 1
Infected files: 0
Infected files: 1
[root@localhost home]# awk '{sum += $3 } END {printf "SUM : " sum"\n"}' ./test.txt
SUM : 10
– 여려개의 txt 파일에서 한번에 합계 구하기
[root@localhost ~]# find ./ -name '0*.txt' | xargs cat | awk '$1 == "Infected" {sum += $3 } END {printf "SUM : " sum"\n"}'
SUM : 10
5) /var/log 디렉토리에 500MB 이상 파일을 압축
[root@localhost log]# ls -al mes* | awk '$5 > 500000 {system("gzip -f "$8)}'
6) 로그인 정보 중 root 가 로그인한 로그 중 부팅시 발행한 로그를 제외하고 출력
[root@localhost ~]# last | awk '$1 =="root" && $3 != "boot" {print}'
root     pts/0        192.168.11.6     Tue Jan 20 09:03   still logged in
root     tty1                          Tue Jan 20 09:02   still logged in
root     pts/0        192.168.11.6     Tue Jan 20 01:02 - down   (00:24)
~
2. awk 문법
1)  awk 프로그램의 구조
awk ‘패턴 {액션}’ 파일명
2) awk 의 패턴
BEGIN    입력화일을 읽어들이기 전 옆에 제시되는 문자열을 실행
END       awk 가 모든 입력을 처리한 후 옆에 제시되는 문자열을 실행
3) awk 의 연산자
=    +=    -=    *=    /=    %=    배정연산자
+    –    *    /    %    ++    —      산술연산자
||    &&    !                            논리연산자(OR, AND, NOT)
>    >=    <    <=    ==    !=      비교연산자
v ~p                                       변수 v가 패턴 P에 부합되면 참
v !~p                                      변수 v가 패턴 P에 부합되지 않으면 참
4) awk 에 미리 정의된 변수
변수              내용
FILENAME    현재 처리되고 있는 입력 파일의 이름
FS                  입력 필드 분리문자
NR                 현재 레코드(행)의 번호
NF                  현재 레코드(행)의 필드의 갯수
OFS                출력되는 필드의 분리문자

댓글 없음: