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 관련 공식 문서에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

Linux xargs 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

실습 폴더에서 파일과 디렉터리를 만들고 복사·이동·삭제해 봅니다. 덮어쓰기와 삭제 전에 경로와 결과를 확인하는 습관도 익힙니다.

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

Linux / 리눅스 Bash 명령어 연결 연산자: ;, &&, ||, &, | 사용법

리눅스 Bash의 ;, &&, ||, &, |, |&, ! 차이를 종료 상태와 실제 예제로 설명합니다. 조건부 실행, 백그라운드 작업, 파이프라인과 pipefail 사용법까지 정리합니다.

Linux / 명령어 / dirname - 경로에서 디렉터리 부분 추출

Linux / 명령어 / dirname - 경로에서 디렉터리 부분 추출

Linux dirname 명령어로 경로의 디렉터리 부분을 추출하는 방법을 설명합니다. 입력 형태별 결과와 basename, realpath의 차이 및 셸 스크립트 활용법을 정리합니다.

Linux 강좌 / 파일 시스템 이해하기 - 절대·상대 경로와 주요 디렉터리

Linux 강좌 / 파일 시스템 이해하기 - 절대·상대 경로와 주요 디렉터리

리눅스 파일 시스템의 트리 구조와 절대·상대 경로를 이해하고, /home·/etc·/var 등 주요 디렉터리의 역할과 경로를 읽는 방법을 익힙니다.

Linux / 명령어 / less - 긴 파일을 검색하며 페이지 단위로 보기

Linux / 명령어 / less - 긴 파일을 검색하며 페이지 단위로 보기

Linux less 명령어로 긴 텍스트와 명령 출력을 페이지 단위로 탐색하는 방법을 설명합니다. 검색, 이동, 실시간 갱신과 파이프 사용법을 정리합니다.

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux pacman 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux / 명령어 / passwd - 사용자 비밀번호 변경

Linux passwd 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / fdisk - 디스크 파티션 표 확인과 편집

Linux / 명령어 / fdisk - 디스크 파티션 표 확인과 편집

Linux fdisk 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / gzip - 파일을 gzip 형식으로 압축하기

Linux / 명령어 / gzip - 파일을 gzip 형식으로 압축하기

Linux gzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.