한 command 속의 작은 언어
awk 가 입력을 줄 단위로 읽어서 프로그램 실행. 프로그램은 pattern { action } 룰 시퀀스. pattern 이 어떤 줄에 액션을 발사할지 결정, action 은 awk 의 C 풍 미니언어로 무엇이든.
필드 변수
각 줄을 공백 기준으로 자동 분할 → $1, $2, ..., $NF (마지막). NF 는 필드 개수, NR 는 현재 줄 번호, $0 는 줄 전체.
일을 하는 예시
awk '{print $1}'— 각 줄의 첫 필드.awk '{print $NF}'— 마지막 필드.awk -F: '{print $1}' /etc/passwd— 콜론 구분자.awk '/error/ {print NR, $0}'— 'error' 포함 줄의 줄번호 + 내용.awk 'NR==5'— 5 번째 줄만.awk '{sum += $3} END {print sum}'— 3 번째 컬럼 합.awk 'length($0) > 100'— 100 글자 넘는 줄.
BEGIN / END 블록
BEGIN { ... } 는 입력 전 한 번. END { ... } 는 끝나고 한 번. 헤더, 합계, 평균에 유용.
awk 'BEGIN {print "size,name"} {print $5","$9}' <(ls -l)CSV 헤더 + 파일별 size,name — sort 나 jq 로 그대로 파이프.
왜 awk 가 sed 위에
sed = 치환 잘함. awk = 산술 + 필드 조작 잘함. 셀 세거나 컬럼 합산하거나 숫자 비교로 필터링하는 순간 sed 에서 awk 로 갈아타기.