Computer >> 컴퓨터 >  >> 시스템 >> Linux

AWK 명령어 및 스크립트 작성 방법 완벽 가이드

awk 명령어는 텍스트 파일을 처리하거나 분석할 때 활용할 수 있는 강력한 도구입니다. 특히 행(row)과 열(column)로 구성된 데이터 파일을 분석하는 데 탁월한 성능을 발휘합니다. 간단한 awk 명령은 명령줄에서 바로 실행할 수 있으며, 더 복잡한 작업은 awk 프로그램(이른바 'awk 스크립트')으로 작성해 파일로 저장해 두는 것이 좋습니다.

AWK 명령어 및 스크립트 작성 방법 완벽 가이드

AWK 기본 사용법

awk 명령의 기본 형식은 다음과 같습니다.

awk 'pattern {action}' input-file > output-file

이 명령의 의미는 다음과 같습니다. 입력 파일의 각 줄을 읽어 들인 뒤, 해당 줄에 지정한 패턴(pattern)이 포함되어 있으면 그 줄에 액션(action)을 적용하고 결과를 출력 파일에 기록합니다. 패턴을 생략하면 모든 줄에 액션이 적용됩니다. 예를 들어 보겠습니다.

awk '{ print $5 }' table1.txt > output1.txt

위 문장은 각 줄에서 5번째 열의 값을 가져와 출력 파일 "output1.txt"에 한 줄씩 기록합니다. '$4' 변수는 네 번째 열을 가리키며, 마찬가지로 $1, $2, $3 등을 사용해 첫 번째, 두 번째, 세 번째 열에 접근할 수 있습니다. 기본적으로 열은 공백이나 탭(이른바 공백 문자, whitespace)으로 구분되어 있다고 가정합니다. 따라서 입력 파일 "table1.txt"에 다음과 같은 내용이 있다면,

1, Justin Timberlake, Title 545, Price $7.30
2, Taylor Swift, Title 723, Price $7.90
3, Mick Jagger, Title 610, Price $7.90
4, Lady Gaga, Title 118, Price $7.30
5, Johnny Cash, Title 482, Price $6.50
6, Elvis Presley, Title 335, Price $7.30
7, John Lennon, Title 271, Price $7.90
8, Michael Jackson, Title 373, Price $5.50

앞서 소개한 명령은 출력 파일 "output1.txt"에 다음과 같은 결과를 기록합니다.

545,
723,
610,
118,
482,
335,
271,
373,

열 구분자가 공백이나 탭이 아니라 쉼표처럼 다른 문자라면, awk 문에서 다음과 같이 구분자를 직접 지정할 수 있습니다.

awk -F, '{ print $3 }' table1.txt > output1.txt

이 명령은 열이 쉼표로 구분되어 있다고 간주하고 각 줄의 3번째 열 값을 선택합니다. 따라서 이 경우 출력 결과는 다음과 같습니다.

Title 545
Title 723
Title 610
Title 118
Title 482
Title 335
Title 271
Title 373

AWK에서 조건식 활용하기

중괄호('{', '}') 안에 나열된 문장들의 집합을 블록(block)이라고 합니다. 블록 앞에 조건식을 넣으면, 그 조건이 참일 때만 블록 안의 문장이 실행됩니다.

awk '$7=="\$7.30" { print $3 }' table1.txt

여기서 조건은 $7=="\$7.30"으로, 7번째 열의 값이 $7.30과 같다는 의미입니다. 달러 기호($) 앞에 붙인 백슬래시(\)는 시스템이 $7을 변수로 잘못 해석하지 않도록 하고, 달러 기호를 문자 그대로 인식하게 만드는 역할을 합니다.

결국 이 awk 문장은 7번째 열에 "$7.30"이 있는 줄들에 대해서만 3번째 열의 값을 출력합니다.

조건 자리에 정규 표현식(regular expression)을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.

awk '/30/ { print $3 }' table1.txt

두 개의 슬래시('/') 사이에 있는 문자열이 바로 정규 표현식입니다. 여기서는 단순히 "30"이라는 문자열입니다. 즉, 어떤 줄에 "30"이라는 문자열이 포함되어 있으면 해당 줄의 3번째 열 값을 출력합니다. 위 예제의 출력 결과는 다음과 같습니다.

Timberlake,
Gaga,
Presley,

AWK로 계산 수행하기

테이블의 요소가 숫자라면 awk로 다음 예제처럼 다양한 계산을 수행할 수 있습니다.

awk '{ print ($2 * $3) + $7 }'

현재 행의 요소에 접근하는 변수($1, $2 등) 외에도, 전체 행(줄 전체)을 가리키는 $0 변수와 필드(열)의 개수를 담고 있는 NF 변수가 제공됩니다.

또한 다음 예제처럼 새로운 변수를 직접 정의해 사용할 수도 있습니다.

awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }'

이 명령은 각 행의 모든 요소를 합산한 결과를 계산하여 출력합니다.

참고: awk 문장은 sed 명령과 함께 조합하여 자주 사용됩니다. 두 도구를 함께 활용하면 텍스트 치환과 데이터 추출 작업을 더욱 효율적으로 처리할 수 있습니다.