참조 원문 : Introduction to awk
관련 글 : awk를 이용한 검색, awk에서 변수 사용, 6가지 awk 트릭
awk는 패턴을 찾아 그와 관련된 문자열을 처리하는 유틸리티로 텍스트 파일에서 정보를 찾아 필요한 형식으로 재생성, 파일의 서식 변경, 데이터베이스 생성과 데이터를 이용한 수학 계산에 사용합니다. awk라는 이름은 프로그램 제작자들의 이름인 Aho, Weinberger, Kernighan의 앞글자들을 따서 만든 겁니다. 그 외에 awk의 최신 버전에 해당하는 nawk라는 것이 있고 GNU 버전인 gawk라는 것도 있습니다. 리눅스의 경우 awk 명령어가 심볼릭 링크를 통해 gawk를 가리키고 있는 경우가 많습니다. 참고로 우분투의 경우 awk가 심볼릭 링크를 통해 mawk(mike’s awk)라는 프로그램으로 링크되어 있는데 사실상 둘이 다를 게 거의 없기 때문에 신경쓰지 않아도 됩니다.
awk는 표준 입력(=stdin, 키보드로부터 받은 입력), 파일, 다른 프로세스의 출력으로부터 데이터를 받습니다. 데이터를 받으면 입력한 패턴과 일치하는 줄을 찾습니다.
awk 사용
awk [ -F<char> ] {pgm} | { -f <pgm_file> } [ <vars> ] [ – | <data_file> ]
- char: 필드 구분 문자
- pgm: 실행할 명령어
- vars: 변수
- data file: 입력 데이터 파일
기본적으론 공백이나 탭이 필드 구분 문자로 사용되지만 -F 옵션을 사용하면 다른 문자를 필드 구분 문자로 사용할 수 있습니다. 예를 들어 필드가 콜론(:)으로 나눠져 있을 경우 아래와 같이 사용합니다.
awk -F:
파일 내용을 입력
아래는 awk를 이용하여 특정 파일에서 지정한 패턴을 찾는 문법과 실제 사용 예로 ps 명령어의 출력 결과를 텍스트 파일로 만든 후 awk를 이용해 “apache”라는 문자열이 있는 줄을 검색하는 것을 보여주고 있습니다.
문법: awk ‘pattern’ filename
$ ps aux > processes
$ awk ‘/apache/’ processes
apache 2206 0.0 1.0 207376 3972 ? S 22:20 0:00 /usr/sbin/httpd
apache 2207 0.0 1.0 207376 3972 ? S 22:20 0:00 /usr/sbin/httpd
…생략…
아래는 패턴 대신 액션을 사용한 예입니다. 출력 결과가 위와 다른데 그 이유는 “$1″을 사용하여 모든 줄의 첫 번째 필드를 출력하게 했기 때문입니다. 필드 구분 문자를 따로 지정하지 않았기 때문에 공백을 필드 구분 문자로 사용합니다.
문법: awk ‘action’ filename
$ ps aux > processes
$ awk ‘{print $1}’ processes
root
root
…생략…
아래는 패턴과 액션을 섞어서 처음 결과에서 첫 번째 필드만 뽑아내는 문법과 예입니다.
문법: awk ‘pattern {action}’ filename
awk ‘/apache/{print $1}’ processes
apache
apache
apache