awk
의 가장 기본적인 사용법은 옵션, 어떤 문자열을 추출한 것인지를 기술한 awk 프로그램, 그리고 대상 파일로 이루이전다.
$ awk [option] 'pattern { action }' target-file
$ awk [option] -f [awk-script-file] target-file
예를 들어 다음과 같은 내용이 작성되어 있는 파일(file1.txt)이 있다고 하자.
info login 200
error login 500
error join 500
위 파일에서 오류 코드만 출력해 보자.
$NF
는 Number of Field의 약자로 필드의 개수, 즉 마지막 필드의 문자열을 출력하겠다는 으미이다. NF
는 awk
에서 제공하는 내장 변수이다.
$ awk '$1 == "error" {print $NF}' file1.txt
# 500
# 500
awk의 Action은 {}
사이에 기술된다. Action은 제어문(조건문, 반복문 등)과 입/출력문(print, printf)으로 구성된다.
action | description |
---|---|
대상 파일 내용을 그대로 출력함 | |
print FIELD-LIST | 대상 파일의 필드 인덱스(n), 자체 변수(NF, FNR 등), 문자열 등을 조합하여 명시한 대로 출력함 |
print FIELD-LIST>FILE | 대상 파일의 필드 인덱스(n), 자체 변수(NF, FNR 등), 문자열 등을 조함하여 명시한 대로 파일에 출력함 |
printf FORMAT, FIELD-LIST | 명시한 파일의 필드 인덱스를 명시한 포맷에 맞추어 출력함 |
printf FORMAT, FIELD-LIST>FILE | 명시한 대상 파일의 필드 인덱스를 명시한 포맷에 맞추어 파일에 출력함 |
getline | 대상 파일의 짝수 라인과 마지막 라인을 읽어들임. 단독으로 사용할 수 없으며, print 등과 함께 사용해야 함 |
getline var | 대상 파일의 홀수 라인을 읽어들여 단독으로 사용할 수 없으며, print 등과 함께 사용해야 함 |
getline < FILE | 명시한 파일의 값을 읽어들임. 단독으로 사용할 수 없으며, print 등과 함께 사용해야 함 |
getline var < FILE | 명시한 파일의 값을 읽어 var에 저장함. print등과 함께 사용해야 하며 파일에 명시된 숫자에 해당하는 필드를 출력함 |
# 파일의 레코드 번호를 파일 내용과 함께 출력
$ awk '{print FNR, $0}' file.txt
# 파일의 레코드 번호와 파일 내용을 file1.txt에 저장
$ awk '{print FNR, $0}' > file1.txt file.txt
# 1번째 필드와 2번째 필드를 지정한 포맷에 맞게 출력
$ awk '{printf "%-10s %s\n", $1, $2}' file.txt
format | description |
---|---|
%c | 단일 문자 |
%d, %i | 숫자(정수 부분만 표현) |
%e, %E | [-]d.dddddde[+-]dd 형식의 숫자 |
%f,%F | [-]ddd.dddddd 형식의 숫자 |
%g,%G | %e, %f 형식의 숫자를 줄여줌 |
%o | 8진수 정수 |
%u | 부호 없는 10진수 |
%s | 문자열 |
%x,%X | 16진수 정수 |
%% | %퍼센트 기호 |