awk

chris·2023년 1월 3일
0

shell script

목록 보기
3/3

사용법

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의 약자로 필드의 개수, 즉 마지막 필드의 문자열을 출력하겠다는 으미이다. NFawk에서 제공하는 내장 변수이다.

$ awk '$1 == "error" {print $NF}' file1.txt
# 500
# 500

Action

awk의 Action은 {} 사이에 기술된다. Action은 제어문(조건문, 반복문 등)과 입/출력문(print, printf)으로 구성된다.

actiondescription
print대상 파일 내용을 그대로 출력함
print FIELD-LIST대상 파일의 필드 인덱스(0 0~n), 자체 변수(NF, FNR 등), 문자열 등을 조합하여 명시한 대로 출력함
print FIELD-LIST>FILE대상 파일의 필드 인덱스(0 0~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

printf 포맷 유형

formatdescription
%c단일 문자
%d, %i숫자(정수 부분만 표현)
%e, %E[-]d.dddddde[+-]dd 형식의 숫자
%f,%F[-]ddd.dddddd 형식의 숫자
%g,%G%e, %f 형식의 숫자를 줄여줌
%o8진수 정수
%u부호 없는 10진수
%s문자열
%x,%X16진수 정수
%%%퍼센트 기호
profile
software engineer

0개의 댓글