“awk 는 유닉스에서 처음 개발된 스크립트 언어로 텍스트 형태로 되어있는 데이타를 필드로 구분하여 처리하는 기능을 기본으로 합니다. 주로 패턴검색과 조작을 통해 레포트를 만드는 등의 작업에 사용됩니다. 여기서는 awk 를 활용할 수 있는 몇가지 예제와 문법을 설명합니다. “
1. awk 활용예제
1) date 명령의 결과값을 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 ‘패턴 {액션}’ 파일명
1) awk 프로그램의 구조
awk ‘패턴 {액션}’ 파일명
2) awk 의 패턴
BEGIN 입력화일을 읽어들이기 전 옆에 제시되는 문자열을 실행
END awk 가 모든 입력을 처리한 후 옆에 제시되는 문자열을 실행
BEGIN 입력화일을 읽어들이기 전 옆에 제시되는 문자열을 실행
END awk 가 모든 입력을 처리한 후 옆에 제시되는 문자열을 실행
3) awk 의 연산자
= += -= *= /= %= 배정연산자
+ – * / % ++ — 산술연산자
|| && ! 논리연산자(OR, AND, NOT)
> >= < <= == != 비교연산자
v ~p 변수 v가 패턴 P에 부합되면 참
v !~p 변수 v가 패턴 P에 부합되지 않으면 참
= += -= *= /= %= 배정연산자
+ – * / % ++ — 산술연산자
|| && ! 논리연산자(OR, AND, NOT)
> >= < <= == != 비교연산자
v ~p 변수 v가 패턴 P에 부합되면 참
v !~p 변수 v가 패턴 P에 부합되지 않으면 참
4) awk 에 미리 정의된 변수
변수 내용
FILENAME 현재 처리되고 있는 입력 파일의 이름
FS 입력 필드 분리문자
NR 현재 레코드(행)의 번호
NF 현재 레코드(행)의 필드의 갯수
OFS 출력되는 필드의 분리문자
변수 내용
FILENAME 현재 처리되고 있는 입력 파일의 이름
FS 입력 필드 분리문자
NR 현재 레코드(행)의 번호
NF 현재 레코드(행)의 필드의 갯수
OFS 출력되는 필드의 분리문자
댓글 없음:
댓글 쓰기