awk 명령어

리눅스 awk 명령어 가이드: 단순 추출을 넘어 데이터 분석까지

단순히 텍스트를 자르는 cut만으로는 부족함을 느낀 적 없으시나요? "특정 값이 100 이상일 때만 출력하고 싶다"거나 "로그 파일의 특정 열을 모두 더해 합계를 구하고 싶다"는 요구사항이 생기면 우리는 더 강력한 도구를 찾아야 합니다.

오늘 소개할 리눅스 awk 명령어는 텍스트 형태의 데이터를 행과 열로 인식하여 자유자재로 조작하는 '텍스트 분석기'입니다. 15년 차 엔지니어들이 대용량 서버 로그를 단 몇 초 만에 요약할 때 사용하는 awk의 핵심 문법과 실무 팁을 공개합니다.

1. awk 명령어의 기본 구조와 작동 원리

awk는 기본적으로 '패턴(Pattern) { 동작(Action) }'의 구조를 가집니다. 파일의 모든 행을 읽어 들이며 지정한 패턴에 맞는 줄을 찾아 중괄호 안의 명령을 실행합니다.

💡 핵심 개념 - 필드 변수:

  • $0: 현재 처리 중인 전체 라인
  • $1, $2, ...: 첫 번째, 두 번째 필드 (공백 기준)
  • NF: 현재 라인의 필드 개수 (Number of Fields)
  • NR: 현재 처리 중인 행 번호 (Number of Records)

2. 바로 써먹는 awk 실무 활용 예제

① 특정 필드 추출 및 포맷팅

가장 기초적인 사용법입니다. 공백으로 구분된 데이터에서 원하는 열만 골라내어 보기 좋게 출력합니다.

# 파일의 1번(이름)과 3번(점수) 필드 출력
$ awk '{ print $1 "의 점수: " $3 }' score.txt

② 조건문 활용 (필터링)

값의 크기를 비교하거나 특정 문자열이 포함된 경우만 처리할 수 있습니다.

# 3번째 필드 값이 80 이상인 행만 전체 출력
$ awk '$3 >= 80 { print $0 }' score.txt

③ 데이터 합계 및 평균 계산

END 블록을 사용하면 모든 행을 처리한 뒤 최종 결과값을 출력할 수 있습니다.

# 3번째 필드(점수)의 전체 합계 구하기
$ awk '{ sum += $3 } END { print "Total: " sum }' score.txt

3. awk 핵심 내장 변수 및 옵션 정리

awk의 기능을 제대로 활용하려면 아래의 내장 변수들을 반드시 숙지해야 합니다.

[표 1] awk 내장 변수 및 주요 옵션 가이드
변수/옵션 설명 활용 예시
-F 입력 구분자(Delimiter) 지정 -F ':' (CSV/Passwd)
NR 현재까지 읽은 레코드(행) 번호 파일의 10번째 줄만 출력
NF 현재 행의 필드(열) 개수 비어있는 행 제외 시 활용
OFS 출력 시 필드 사이의 구분자 설정 탭이나 쉼표로 결과 출력
BEGIN / END 파일 처리 전/후 실행될 코드 블록 헤더 추가 및 최종 합계 산출

📢 결론: awk로 데이터 처리의 급을 높이세요

awk는 처음 접하면 생소해 보일 수 있지만, 한 번 익혀두면 엑셀조차 열기 귀찮을 정도로 강력한 데이터 처리 능력을 제공합니다. 특히 대용량 로그 파일에서 특정 조건의 데이터만 추출하고 통계를 내는 작업에는 이만한 도구가 없습니다.

실습 과제: ls -l | awk '{ print $9, $5 }'를 입력하여 현재 디렉토리의 파일 이름과 크기만 깔끔하게 뽑아보세요!

댓글 쓰기

다음 이전