출처
설명
입력을 주어진 분리자(field seperator)로 분리하여 명령을 처리합니다.
주요 옵션
옵션 | 설명 |
---|---|
F | 문자열을 분리할 기준이 되는 분리문자 입력 |
v | 파라미터 전달 |
내장 함수
awk는 지정한 처리를 실행할 때 내장 함수를 이용할 수 있습니다.
함수 | 설명 |
---|---|
sub | 지정한 문자열 치환 |
gsub | 문자열 일괄 치환 |
index | 주어진 문자열과 일치하는 문자의 인덱스를 반환 |
length | 문자열의 길이를 반환 |
substr | 시작위치에서 주어진 길이 만큼의 문자열 반환 |
split | 문자열을 분리하여 배열로 반환 |
문자열 출력 | |
printf | 지정한 포맷에 따라 함수 출력 |
system | 명령 실행 |
$ echo "Hello World" | awk '{ print $0 }'
Hello World
$ echo "Hello World" | awk '{ print $1 }'
Hello
$ echo "Hello World" | awk '{ print $2 }'
World
$ echo "Hello,World" | awk -F "," '{ print $2 }'
World
sub
$ echo "i have a water." | awk -F " " '{ sub("a", "b", $4); print $4 }'
wbter.
gsub
$ echo "i have a water." | awk -F " " '{ gsub("a", "b"); print $1" "$2" "$3" "$4 }'
i hbve b wbter.
index
$ echo "i have a water." | awk -F " " '{ print index($4, "a") }'
2
length
$ echo "i have a water." | awk -F " " '{ print length($4) }'
6
substr
$ echo "1234567890" | awk -F " " '{ print substr($1, 3, 2) }'
34
split
$ echo "A/B/C/D/E/F/G" | awk -F " " '{ print split($1, array, "/");print array[1];print array[3]; }'
7
A
C
printf
$ echo | awk '{ printf("%.1f + %.2f = %.3f\n", 40.1, 20.2, 40.1 + 20.2); }'
40.1 + 20.20 = 60.300
system
# system으로 추가 명령어 실행
$ echo "Hello World" | awk '{ system("echo "$1) }'
Hello
사용예제
그룹의 합 구하기
그룹의 합을 구하는 것은 배열을 이용합니다. 배열의 인덱스를 키로 사용하여 값을 모두 더하여 주고 마지막에 출력하면 됩니다.
$ cat sample.txt | awk '{ print $1 }'
a
b
a
c
c
$ cat sample.txt | awk '{ print $2 }'
1
2
4
1
2
$ cat sample.txt
a 1
b 2
a 4
c 1
c 2
$ cat sample.txt | awk '{ arr[$1] += $2 } END { for (i in arr) { print i, arr[i] } }'
a 5
b 2
c 3
합계(sum) 계산하기
합계는 지정한 인덱스의 값을 모두 더하여 구할 수 있습니다.
$ cat sample.txt | awk '{sum+=$2} END {print sum}'
10
문자열 자르기
문자열을 자를때는 내장함수 substr을 이용합니다.
$ echo "1234567890" | awk -F " " '{ print substr($1, 3, 2) }'
34
파라미터 전달
awk에 파라미터를 전달 할 때는 v 옵션을 이용합니다. v 옵션과 함께 이름=값 형태로 전달하고 내장함수에서 사용하면 됩니다.
root="/webroot"
$ echo | awk -v r=$root '{ print "shell root value - " r}'
shell root value - /webroot