awk

손성훈·2021년 6월 24일
0

linux-command

목록 보기
1/7
post-thumbnail

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...]

Options

Optiondescription
-F단어 구분 문자 지정
-fawk 프로그램 파일 지정
-vawk 프로그램에서 사용될 변수값 지정

awk 프로그램

awk는 기본적으로 .awk 파일의 규칙을 읽어서 target 파일을 분석하는 것이므로 awk 언어의 문법을 알아야 한다.

구성

BEGIN { 동작 }	# 가장 처음 실행할 명령어
{ 동작 }		# 매 줄마다 실행할 명령어
/패턴/		# 패턴에 일치하는 줄만 출력
END { 동작 }	# 가장 나중에 실행할 명령어

내부에 지정된 변수

Variableabbrdescriptiondefault
NRNumber of records현재 문장의 줄 번호None
NFNumber of fields현재 단어의 번호None
FSField separator단어 구분자space
RSRecord separatornewline
OFSOutput Field Separator출력할 때 사용할 단어 구분자space
ORSOutput 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

profile
Living loving and learning

0개의 댓글