awk
는 텍스트 데이터를 처리하고 특정 패턴을 가진 라인을 찾거나 원하는 형식으로 출력하는 데 사용되는 강력한 툴이다. awk
는 특히 리눅스 및 UNIX 시스템에서 널리 사용되며, 명령줄 환경에서 쉽게 실행할 수 있다. 이 글에서는 awk
사용법에 대해 알아본다.
awk
기본 문법
awk
기본 형식과 옵션은 아래와 같다.
awk [OPTION...] [awk program] [ARGUMENT...]
OPTION
- -F : 필드 구분자 지정
- -f : awk program 파일 경로 지정
- -v : awk program에서 사용될 특정 variable 값 지정
awk program
- -f 옵션이 사용되지 않은 경우, awk가 실행할 awk program 코드 지정
ARGUMENT
- 입력 파일 지정 또는 variable 값 지정
awk program
awk
기본 형식에서 awk program은 ”(single quotation marks) 사이에 작성하며, 패턴-액션 쌍을 사용한다.
'pattern { action }'
pattern
: 패턴을 정의. 패턴에 일치하는 라인에 대해서만 액션을 수행한다.action
: 패턴에 일치하는 라인에 대해 실행할 명령을 정의한다.
결국 전체적인 awk
명령어 기본 형식은 다음과 같다.
awk [OPTION...] 'pattern { action }' [ARGUMENT...]
따라서, awk
를 사용하는 작업은 이 'pattern { action }'
을 어떻게 작성하느냐가 대부분을 차지한다.
BEGIN 과 END 사용
pattern
중에 BEGIN
과 END
를 사용할 수 있는데, BEGIN
은 첫번째 레코드를 처리하기 전에 실행할 action
을 지정하고, END
는 반대로 모든 레코드를 처리한 다음 실행할 action
을 지정한다.
awk 'BEGIN { print "TITLE : Print value"} {print $1, $2} END {print "Finished"}' file.txt
예제
파일에서 특정 열 출력
awk '{ print $1 }' data.txt
이 명령어는 data.txt
파일의 각 라인에서 첫 번째 열을 출력한다.
특정 조건을 만족하는 라인 출력
awk '$3 > 50 { print $1, $3 }' data.txt
이 명령어는 data.txt
파일의 각 라인에서 세 번째 열이 50보다 큰 경우 첫 번째와 세 번째 열을 출력한다.
특정 패턴이 들어있는 라인 출력
awk '/pattern/ { print }' data.txt
이 명령어는 data.txt
파일의 각 라인에서 ‘pattern’이라는 문자열이 포함된 경우 해당 라인을 출력한다.
특정 필드들의 합 구하기
awk '{sum += $3} END { print sum }' data.txt
이 명령어는 data.txt
파일의 세번째 열들의 값을 sum
에 더하고, 모든 레코드를 다 처리한 다음 sum
값을 출력한다.
필드 구분 문자 지정하기
awk -F ':' '{ print $1 }' data.txt
이 명령어는 data.txt
파일의 각 레코드를 ‘:
‘ 구분자로 구분해서 첫번째 열 값들을 출력한다.
특정 레코드만 출력하기
awk 'NR == 2 { print $0 }' data.txt
이 명령어는 data.txt
파일 레코드 중 NR==2
즉, 짝수 줄의 레코드를 출력한다.