Linux / 명령어 / awk - 필드별 텍스트 분석과 계산
awk는 입력을 레코드와 필드로 나누어 조건에 맞는 값을 출력하거나 계산합니다. 열 추출, 로그 집계, 간단한 보고서 작성에 유용합니다.
awk 명령어란?
기본 레코드는 한 줄이고, 기본 필드 구분은 연속된 공백 문자입니다. 현재 행 전체는 $0, 첫 필드는 $1, 필드 수는 NF, 누적 행 번호는 NR로 참조합니다. 입력에 따라 -F로 구분자를 지정하세요.
기본 문법
awk [옵션] '패턴 { 동작 }' [파일 ...]
설치된 구현과 옵션은 배포판에 따라 다를 수 있습니다. man awk으로 현재 시스템의 설명을 확인하세요.
사용 예제
두 번째 필드 출력
공백으로 구분된 행에서 원하는 필드만 고릅니다.
awk '{ print $2 }' report.txt
조건에 맞는 행
세 번째 필드가 100보다 큰 행만 출력합니다.
awk '$3 > 100 { print $1, $3 }' report.txt
합계 계산
각 행의 두 번째 필드를 더한 뒤 입력이 끝나면 출력합니다.
awk '{ total += $2 } END { print total }' amounts.txt
필드 조건으로 행 고르기
awk는 기본적으로 연속된 공백을 필드 구분자로 해석합니다. $2는 두 번째 필드이고, 조건이 참인 행에서 $1을 출력할 수 있습니다.
printf 'Ana 12\nBob 7\n' | awk '$2 >= 10 {print $1}'
예시 출력:
Ana
두 번째 행의 값 7은 조건을 만족하지 않아 빠집니다. 열이 탭이나 콜론 등 특정 문자로 구분되어 있다면 -F로 구분자를 지정하세요. 공백이 포함된 CSV 인용 필드나 복잡한 이스케이프까지 처리하려면 CSV 전용 파서를 사용하는 편이 안전합니다.
합계 같은 집계는 행마다 상태를 누적하고 마지막에 출력합니다. 예를 들어 awk '{sum += $2} END {print sum}' 파일은 두 번째 필드의 합을 구합니다. 입력이 숫자가 아닌 문자열이면 기대와 다른 결과가 날 수 있으므로 데이터 형식과 누락된 필드를 먼저 검사하세요.
주요 옵션과 형식
| 옵션·형식 | 설명 |
|---|---|
-F 구분자 |
입력 필드 구분자를 지정합니다. |
-v 이름=값 |
awk 변수의 초기값을 전달합니다. |
BEGIN |
첫 입력 행을 읽기 전에 실행하는 패턴입니다. |
END |
마지막 입력 행을 처리한 뒤 실행하는 패턴입니다. |
사용할 때 주의할 점
awk -F,는 인용부호 안에 쉼표가 들어간 CSV를 제대로 파싱하지 못합니다. 입력이 CSV라면 전용 파서를 사용하세요. GNU gawk 전용 기능은 다른 awk 구현에서 동작하지 않을 수 있습니다.
자주 묻는 질문
awk의 $0과 $1은 무엇이 다른가요?
$0은 현재 레코드 전체, $1은 첫 번째 필드입니다.
공식 문서
옵션의 정확한 동작과 구현별 차이는 awk 관련 공식 문서에서 확인할 수 있습니다.









