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