본문 바로가기
Linux

Linux awk 사용법

by 이포터 2022. 11. 20.

awk 란

유래는 역시 사람이름이다. Alfred Aho, Peter Weinberger, Brian Kernighan 3명의 이니셜을 가져와 awk라고 불리게 되었다구한다.

데이터를 조작하고 리포트를 생성하기 위해 사용하는 언어다. 데이터를 조작할 수 있기 때문에 쉘 스크립트에서 사용되는 필수 도구이며, 작은 데이터베이스를 관리하기 위해서도 필수다.  리눅스에서 사용하는 awk는 GNU 버전의 gawk로 심볼릭 링크되어 있다.

 

1. 전체 내용 출력

awk '{ print }' ./test.txt

 

2. 필드 값 출력

# awk '{ print 필드값 }' ./test.txt
awk '{ print $1 }' ./test.txt
awk '{ print $2 }' ./test.txt

 

3. 필드 값 + 문자열 출력

# awk '{ print "문자열" 필드값 }' ./test.txt
awk '{ print "first : "$1 }' ./test.txt
awk '{ print "second : "$1 }' ./test.txt

 

4. 지정된 문자열 포함 출력

awk '/test/' ./test.txt
awk '/test[0-9]/' ./test.txt

 

5. 특정 필드 값 비교

awk '$1 == 1 { print $1 }' ./test.txt
awk '$1 > 1 { print $1 }' ./test.txt
awk '$1 < 1 { print $1 }' ./test.txt

 

awk 예제

예제 : /etc/passwd 에서

 

1. nginx 행 출력

cat /etc/passwd | awk 'NR==38 {print}'

 

2. nginx 행에서 맨 끝 field 출력

cat /etc/passwd | grep -F nginx | awk -F':' '{print $NF}'

 

3. user 와 nginx 2행을 출력

cat /etc/passwd | grep -P "^nginx|^user"* | awk '{print}'
cat /etc/passwd | awk -F ":" '$1 == "user" || $1 == "nginx" {print $0}'

 

4. 원하는 행만 출력

user : /home/user

nginx : /var/lib/nginx

cat /etc/passwd | awk -F ":" '$1 == "user" || $1 == "nginx" {print $1 ":" $6}'

 

5. 해당 데이터의 ip 주소값 출력

ip a
ip a |awk '/^[1-9]/ {printf $2} /inet[ ]/ {split($2,arr," "); print arr[1]}'

 

6. 정보 출력

NAME = "CentOS Stream"

VERSION = "8"

ID = "centos"

cat /etc/os-release | awk 'NR==1 {print} NR==2{print} NR==3{print}'

 

 

댓글