Linux ETC

awk 를 이용한 패턴 처리

2008.05.19 20:32

호스트웨이 Views:24463

이 툴의 어원은 프로그램을 개발한 Alfred Aho, Peter Weinberger, Brian Kernigham의 머리글자를 따서 명명되어
졌습니다. awk는 C 문법을 연상시키는 완전한 형태의 텍스트 처리 언어입니다.

 
 먼저 awk 이용하여 간단한 패턴 처리를 해보도록 하겠습니다. 
[root@sakang apache2]# ls -al
total 60
drwxr-xr-x   15 root     root         4096 Jan  8  2007 .
drwxr-xr-x   17 root     root         4096 May 30 23:41 ..
drwxr-xr-x    2 root     root         4096 Jan  8  2007 bin
drwxr-xr-x    2 root     root         4096 Jan  8  2007 build
drwxr-xr-x    2 root     root         4096 Jan  8  2007 cgi-bin
drwxr-xr-x    4 root     root         4096 Jun  7 22:20 conf
drwxr-xr-x    3 root     root         4096 Jan  8  2007 error
drwxr-xr-x    3 root     root         4096 Jun  7 22:21 htdocs
drwxr-xr-x    3 root     root         4096 Jan  8  2007 icons
drwxr-xr-x    2 root     root         4096 Jan  8  2007 include
drwxr-xr-x    3 root     root         4096 Jan  8  2007 lib
drwxr-xr-x    2 root     root         4096 Jun  7 01:48 logs
drwxr-xr-x    4 root     root         4096 Jan  8  2007 man
drwxr-xr-x   14 root     root         4096 Jul 28  2006 manual
drwxr-xr-x    2 root     root         4096 Jan  8  2007 modules


위의 출력 결과에서 9번째 필드만을 검색해 보겠습니다.

[root@sakang apache2]# ls -al | awk '{print $9}'   

.
..
bin
build
cgi-bin
conf
error
htdocs
icons
include
lib
logs
man
manual
modules


  다음은 파일에서 데이터를 추출하는 방법입니다.

[root@sakang apache2]# awk '/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 passwd 파일에서 root 라는 단어가 들어간 행만 출력합니다. 물론 여기서도 원하는 필드만 검색할 수가 있습니다. root 라는 단어가 들어간 행의 첫번째 필드만 출력하려면 아래처럼 하시면 됩니다. 

[root@sakang apache2]# awk -F: '/root/{print $1}' /etc/passwd
root
operator

 awk 에서 연산자를 사용하는 방법을 알아보겠습니다.
 아래 커맨드는 비교연산자를 사용한 것 입니다.

[root@sakang /]# ls -al | awk ' $5 > 4096 {print $5}'
118784
16384
8192
8192

 위 예제는 비교연산자를 사용하여 5번째 필드에서 4096 보다 큰 값만 출력하고 있습니다.
 
 awk는 광범위한 연산자들과 뛰어난 성능을 가지고 있지만 여기서는 몇 가지만 살펴보았습니다.
No. Subject Author Date Views
106 rsync / 파티션 전체 동기화 방법 호스트웨이 2012.12.14 2429
105 특정 파일이 소속된 rpm 패키지 찾기 호스트웨이 2012.12.14 1783
104 df 와 du의 출력 크기가 다르게 보이는 이유 호스트웨이 2012.12.14 4436
103 nl명령어를 사용해 파일내용 출력시 행번호 붙이기 file 호스트웨이 2012.12.20 3950
102 df 쉽게 보기 호스트웨이 2012.12.20 2835
101 쉘 프롬프트에서 바로 이전 디렉토리로 이동하기 호스트웨이 2012.12.20 2751
100 free -m 에서 free (남는 메모리 양) 최소량 제한하기 호스트웨이 2012.12.21 2149
99 [ERROR] ftp error 500 OOPS: cannot change directory:/home/ 호스트웨이 2012.12.21 4307
98 리눅스 캐시 메모리 비우기 file 호스트웨이 2012.12.26 5269
97 리눅스 free 명령어 호스트웨이 2012.12.26 1819
96 ls -l 출력 시 날짜형태 변경 호스트웨이 2012.12.27 6164
95 리눅스 uniq 명령어 file 호스트웨이 2012.12.27 7880
94 sftp 서비스 막기 호스트웨이 2012.12.27 1321
93 오늘 생성한 파일만 조회하기 호스트웨이 2012.12.27 6267
92 partprobe - 리부팅 없이 사용 중인 파티션 재인식 호스트웨이 2012.12.28 8368
91 samba 설치 file 호스트웨이 2014.04.14 3380
90 리눅스 커널 업데이트 및 커널 변경 부팅 방법 file 호스트웨이 2014.10.30 23459
89 SVN(subversion) 설치 및 셋팅 file 호스트웨이 2014.12.02 6426
88 epel-release 설치하기 file 호스트웨이 2014.12.22 14299
87 ngrinder를 이용한 부하 테스트 - 1) Controller 설치 file 호스트웨이 2015.04.08 4287