패턴 검색 및 처리 언어
awk '패턴 { 액션 }' 파일
< 동작 방식 >
* 패턴이 생략되면 모든 레코드에 대한 액션이 실행
- 파일에 있는 1행을 읽음
- 레코드를 획득
- 예를 들어 파일에
-----
ber
beer
----
가 있으면
1행 읽으면 -> 레코드 'ber' 를 획득
- 예를 들어 파일에
- 패턴에 부합한지 확인
- 부합하면 액션을 실행
- 부합자지 않으면 아무것도 하지 않음
- 2행을 읽음
필드변수
awk : 특정 필드를 추출할 때 많이 사용
▶ awk의 필드 변수
# 전체 : $0
-rwxr-xr-x 1 root wheel 100928 3 21 15:13 yes
# $1 $2 $3 $4 $5 $6 $7 $8 $9
# $(NF-2) $(NF-1) $NF
▶ ls 명령어 결과에서 5번째와 9번째의 필트 출력
$ ls -l /usr/bin | awk '{print $5, $9}'
171824 AssetCacheLocatorUtil
227584 AssetCacheManagerUtil
$ ls -l /usr/bin | awk '{print $5 $9}' # , 삭제되어서 두 필드가 붙어서 출력
171824AssetCacheLocatorUtil
227584AssetCacheManagerUtil
...
▶ 레코드의 마지막 필드 출력 : $NF
$ ls -l /usr/bin | awk '{print $(NF-1), $NF}'
15:13 AssetCacheLocatorUtil
15:13 AssetCacheManagerUtil
...
패턴 지정
▶ 9 번째 필드가 cp 로 시작하는 것만 출력
awk '$9 ~ /^cp/ {print $5, $9}'
~ : 비교
/ ^cp / : 정규표현식 cp
액션 생략
액션을 생략하면 단순히 레코드를 출력 → {print $0} 이 실행
▶ 같은 결과가 나오는 코드
$ awk '$9 ~/^cp/'
$ awk '$9 ~/^cp/ {print}'
$ awk '$9 ~/^cp/ {print $0}'
csv 파일 총합 과 평균
▶ 총합
$ awk -F, '{sum += $NF} END {print sum}' score.csv
323
-F 는 필드 구분자를 셋팅하는 옵션 → -F, : , 을 필드 구분자로 설정
▶ 평균
$ awk -F, '{sum += $NF} END {print "Average:",sum/NR}' score.csv
Average: 53.8333
'책 > 모두의 리눅스' 카테고리의 다른 글
[ 책 ] [ 모두의 리눅스 ] 16장 셸 스크립트 작성법 (0) | 2024.04.09 |
---|---|
[ 책 ] [ 모두의리눅스 ] 15장 셸 스크립트 작성 (0) | 2024.04.07 |
[ 책 ] [ 모두의 리눅스 ] 14장 sed (Stream Editor) 명령어 (0) | 2024.04.06 |
[ 책 ] [ 모두의 리눅스 ] 13장 확장 정규 표현식 (0) | 2024.04.04 |
[ 책 ] [ 모두의 리눅스 ] 13장 메타문자 (0) | 2024.04.04 |