awk
입력을 주어진 분리자(field seperator)로 분리하여 명령을 처리합니다.
주요 옵션
옵션설명
F | 문자열을 분리할 기준이 되는 분리문자 입력 |
v | 파라미터 전달 |
내장 함수
awk는 지정한 처리를 실행할 때 내장 함수를 이용할 수 있습니다.
함수설명
sub | 지정한 문자열 치환 |
gsub | 문자열 일괄 치환 |
index | 주어진 문자열과 일치하는 문자의 인덱스를 반환 |
length | 문자열의 길이를 반환 |
substr | 시작위치에서 주어진 길이 만큼의 문자열 반환 |
split | 문자열을 분리하여 배열로 반환 |
printf | 지정한 포맷에 따라 함수 출력 |
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
사용예제
그룹의 합 구하기
그룹의 합을 구하는 것은 배열을 이용합니다. 배열의 인덱스를 키로 사용하여 값을 모두 더하여 주고 마지막에 출력하면 됩니다.
$ 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
마지막 편집일시 : 2019년 5월 9일 11:17 오전
# 참고