awk 명령어는 데이터를 조작하거나 보고서를 생성하기 위한 스크립트 언어이다.
Shell script를 사용하는 것처럼 스크립트를 작성하는 것이다.
다만, 이 언어의 목적이 파일을 조작하는 것에 중점을 두기 때문에 좀 더 편리하게 사용할 수 있다.
1. awk
확장자를 가지는 파일을 만들어 그 안에 스크립트를 짠다.
2. awk
명령어를 통해 bash에서 스크립트 파일와 분석할 파일을 지정한다.
awk
는 기본적으로 space
를 기준으로 모든 문장을 분리해 놓는다. 이를 단어(field)라고 부른다. 각각의 단어는 $1, $2 등으로 접근할 수도 있고 for문으로 탐색을 할 수도 있다. $0은 전체 문장을 의미한다.
# 모든 줄의 문장을 출력합니다.
awk '{print}' employee.txt
# manager를 포함하는 문장을 모두 출력합니다.
awk '/manager/ {print}' employee.txt
# 각 줄에서 첫번째, 4번째 단어만 출력합니다.
awk '{print $1,$4}' employee.txt
# 각 줄의 번호를 함께 출력합니다.
awk '{print NR,$0}' employee.txt
# 첫 번째 단어와 마지막 단어를 출력합니다.
awk '{print $1,$NF}' employee.txt
# 3번째 줄에서 6번째 줄까지 줄 번호와 함께 출력합니다.
awk 'NR==3, NR==6 {print NR,$0}' employee.txt
awk [OPTION...] [awk program...] [Argument...]
Option | description |
---|---|
-F | 단어 구분 문자 지정 |
-f | awk 프로그램 파일 지정 |
-v | awk 프로그램에서 사용될 변수값 지정 |
awk는 기본적으로 .awk 파일의 규칙을 읽어서 target 파일을 분석하는 것이므로 awk 언어의 문법을 알아야 한다.
BEGIN { 동작 } # 가장 처음 실행할 명령어
{ 동작 } # 매 줄마다 실행할 명령어
/패턴/ # 패턴에 일치하는 줄만 출력
END { 동작 } # 가장 나중에 실행할 명령어
Variable | abbr | description | default |
---|---|---|---|
NR | Number of records | 현재 문장의 줄 번호 | None |
NF | Number of fields | 현재 단어의 번호 | None |
FS | Field separator | 단어 구분자 | space |
RS | Record separator | newline | |
OFS | Output Field Separator | 출력할 때 사용할 단어 구분자 | space |
ORS | Output Record Separator | 출력할 때 사용할 문장 구분자 | newline |
모두 word_frequency.awk에 작성되며
awk -f word_frequency.awk people.txt
로 실행된다.
{
for (i=1; i<=NF; i++)
words[$i]++
}
END {
for (i in words)
print i, words[i]
}
https://www.geeksforgeeks.org/awk-command-unixlinux-examples/
https://ko.wikipedia.org/wiki/AWK