
awk는 텍스트 처리와 보고용으로 설계된 스크립트 언어이자 유틸리티입니다. 유닉스 계열에서 파일이나 파이프라인으로 들어오는 텍스트를 행(record)과 칸(field) 단위로 빠르게 검색·변환·집계할 때 주로 사용됩니다. 이름은 개발자 성(Alfred Aho, Peter Weinberger, Brian Kernighan)의 머리글자에서 왔습니다. 주요 특징 - 패턴-액션 구조: "패턴 {액션}" 형태로 작성. 패턴에 매치되는 각 레코드(기본적으로 한 줄)에 대해 액션을 수행. - 기본 레코드/필드 분리: 레코드 구분자 RS는 기본 "\n" (행 단위), 필드 구분자 FS는 기본으로 연속 공백(스페이스/탭). - 필드 접근: $0는 전체 행, $1, $2...는 각 필드. NF(필드 수), NR(처리한 전체 레코드 수), FNR(현재 파일의 레코드 번호) 등 빌트인 변수 제공. - BEGIN/END 블록: 입력 처리 전/후에 실행되는 블록 사용 가능(초기화나 요약 출력을 위해 유용). - 연산 및 내장 함수: 문자열/수치 연산, 정규표현식 매칭, 서식 출력(printf), 서브스트링, 길이 등 함수들. - 연관 배열: 키-값 형태의 배열을 지원해 집계(집단별 합산·카운트 등)에 편리. - 확장 구현: POSIX awk 표준이 있고, GNU awk(gawk), mawk, nawk 등 구현체별로 확장과 성능 차이 존재. 간단한 사용 예 - 첫 번째 칼럼 출력: awk '{print $1}' file - 콜론(:)으로 구분된 필드에서 사용자명 출력: awk -F: '{print $1}' /etc/passwd - 두 번째 칼럼 합계 계산: awk '{sum+=$2} END {print sum}' file - 특정 패턴이 포함된 행만 출력: awk '/error/ {print}' logfile - 키별 카운트: awk '{cnt[$1]++} END {for (k in cnt) print k, cnt[k]}' file 언제 쓰나 - 로그 파일 분석, 컬럼 기반 텍스트 변환, 빠른 데이터 요약/집계, 파이프라인 중간에서 간단한 조작을 할 때 매우 적합합니다. 복잡한 작업이나 대규모 스크립트는 awk로도 가능하지만, 가독성·유지보수 측면에서 별도 스크립트 파일로 관리하거나 다른 언어를 고려하기도 합니다. 요약 awk는 텍스트 스트림을 행/필드 단위로 처리하는 간결하고 강력한 도구로, 유닉스 계열에서 표준처럼 널리 쓰입니다. 구현체(gawk, mawk 등)에 따라 추가 기능과 성능 차이가 있으므로, 특수 기능을 쓸 경우 해당 구현체 문서를 참고하면 됩니다.