awk 명령어
awk는 유닉스에서 개발된 스크립트 언어로 텍스트가 저장되어 있는 파일을 원하는 대로 필터링하거나 추가해주거나 기타 가공을 통해서 나온 결과를 행과 열로 출력해주는 프로그램이다. 즉, awk 명령의 입력으로 지정된 파일로부터 데이터를 분류한 다음, 분류된 텍스트 데이터를 바탕으로 패턴 매칭 여부를 검사하거나 데이터 조작 및 연산 등의 액션을 수행하고, 그 결과를 출력하는 기능을 수행한다.
awk를 사용하기 위해서는 파일 내용에 대한 기본적인 용어인 레코드(Record)와 필드(Field)를 알아야 한다. 각 줄(line)은 레코드(Record)라고 칭하며 그 안에 각각의 단어들을 필드(Field)라고 칭한다. 또한 $0은 레코드를 뜻하며 $1~$n까지는 각각의 열을 나타낸다.
이러한 awk명령어를 사용하여 할 수 있는 작업은 하기와 같다.
- 텍스트 파일의 전체 내용 출력.
- 파일의 특정 필드만 출력.
- 특정 필드에 문자열을 추가해서 출력.
- 패턴이 포함된 레코드 출력.
- 특정 필드에 연산 수행 결과 출력.
- 필드 값 비교에 따라 레코드 출력.
awk 명령어 사용법
awk 명령의 기본 형식은 아래와 같다
awk [OPTION...] [awk program] [ARGUMENT...]
-option
-F | 필드 구분 기호 지정 |
-f | awk program 파일 경로 지정 |
-v | awk program에서 사용될 특정 variable값 지정 |
-awk program
awk program의 기본적이 형식은 pattern { action }이며 ' '(single quotation marks) 안에 작성한다. 또한 action pattern 모두 아래와 같이 생략이 가능하다.
# pattern 생략.
$ awk '{ print }' ./file.txt # file.txt의 모든 레코드 출력.
# action 생략.
$ awk '/p/' ./file.txt # file.txt에서 p를 포함하는 레코드 출력.
-argument
입력 파일 지정 또는 variable값 지정.
-BEIGN & END
BEGIN은 awk가 모든 레코드를 돌기 전에 한번 action을 수행하고 END는 모든 레코드를 다 돈 후에 마지막으로 정의한 action이 실행된다.
-내장 함수
awk에는 여러 가지 내장 함수들이 있다. 단어의 길이를 알아내려면 length함수, 단어의 부분 단어를 추출하려면 substr함수를 사용할 수 있다. 그 외에도 여러 가지 내장 함수가 존재한다. 사용 예제는 아래와 같다.
#file.txt 내용
1 AAAAAAAAAA 10 20 30
2 BBBBBBBBBB 40 50 60
3 CCCCCCCCCC 70 80 90
↓
awk '{ print ("$2 leng : " length($2), "substr(0,4) : " substr($2,0,4)) }' file.txt
↓
$2 leng : 10 substr(0,4) : AAAA
$2 leng : 10 substr(0,4) : BBBB
$2 leng : 10 substr(0,4) : CCCC
awk 명령 사용 예제
1. 파일의 전체 내용 출력
awk '{print}' file.txt
↓
1 A 10 20 30
2 B 40 50 60
3 C 70 80 90
2. 첫 번째 두 번째 필드 값 출력
awk '{print $1,$2}' file.txt
↓
1 A
2 B
3 C
3. 필드 값 앞에 임의의 문자를 같이 출력
awk '{print "number:"$1, "alphabet:"$2}' file.txt
↓
number:1 alphabet:A
number:2 alphabet:B
number:3 alphabet:C
4. pattern을 사용하여 A를 포함한 레코드 출력
awk '/A/' file.txt
↓
1 A 10 20 30
5. 필드 값 비교를 통해 필드 값이 3인 레코드만 출력
awk '$1 == 3 {print}' file.txt
↓
3 C 70 80 90
6. 3열의 숫자 중에 30보다 큰 레코드만 출력
awk '{ if( $3 > 30) print $0 }' file.txt
↓
2 B 40 50 60
3 C 70 80 90
7. 그 외의 사용 예제
특정 필드들의 합 구하기 | awk '{sum += $3} END { print sum }' [FILE] |
여러 필드들의 합 구하기 | awk '{ for (i=2; i<=NF; i++) total += $i }; END { print "TOTAL : "total }' [FILE] |
레코드 단위로 필드 합 및 평균 값 구하기 | awk '{ sum = 0 } {sum += ($3+$4+$5) } { print $0, sum, sum/3 }' [FILE] |
필드에 연산을 수행한 결과 출력하기 | awk '{print $1, $2, $3+2, $4, $5}' [FILE] |
레코드 또는 필드의 문자열 길이 검사 | awk ' length($0) > 20' [FILE] |
파일에 저장된 awk program 실행 | awk -f [AWK FILE] [FILE] |
필드 구분 문자 변경하기 | awk -F ':' '{ print $1 }' [FILE] |
특정 레코드만 출력하기 | awk 'NR == 2 { print $0; exit }' [FILE] |
출력 필드 너비 지정하기 | awk '{ printf "%-3s %-8s %-4s %-4s %-4s\n", $1, $2, $3, $4, $5}' [FILE] |
필드 중 최대 값 출력 | awk '{max = 0; for (i=3; i<NF; i++) max = ($i > max) ? $i : max ; print max}' [FILE] |
'Linux' 카테고리의 다른 글
디스크 관리 및 파일 시스템 (0) | 2022.05.25 |
---|---|
sed 명령어 (0) | 2021.12.27 |
VI편집기 (0) | 2021.10.06 |
기본적인 Linux 명령어 (0) | 2021.09.02 |
Linux (0) | 2021.08.30 |