안녕하세요.
IT 성능 전문가 IT를 전하는
루디쿡 아이티입니다~!!
이번에 소개드릴 리눅스의 핵심 기능은 바로 awk 입니다!!

awk란?
awk는 1977년 벨 연구소의 세 명의 거장, Alfred Aho, Peter Weinberger, Brian Kernighan의
이름 앞 글자를 따서 만들어진 강력한 텍스트 처리 도구입니다.
단순히 텍스트를 검색하는 grep이나 정렬하는 sort를 넘어, awk는
텍스트 데이터를 가공하고, 조작하고, 보고서를 생성하는데
특화된 스크립트 언어에 가깝습니다.
파일이나 파이프라인으로 전달받은 텍스트를 한 줄씩 읽어,
특정 패턴(조건)을 만족하는 줄을 찾고, 정의된 동작(action)을 수행합니다.
복잡한 로그 파일 분석, 데이터 추출, CSV 파일 처리 등에서
그 진가를 발휘하며, 셸 스크립트의 감초 역할을 톡톡히 해냅니다.
awk 기본 형식
awk는 기본적으로 '패턴 { 동작 }' 구조로 이루어집니다.
awk '패턴 { 동작 }' 파일명
아래와 같은 파일이 있다고 가정할 때
[log.txt]
INFO Login success user1
ERROR Login failed user2
INFO Data loaded user3
ERROR Access denied user4
awk '/ERROR/ { print $3, $4 }' log.txt
- log.txt (대상) : 해당 파일 안에
- /ERROR/ (조건) :'ERROR'라는 단어가 포함되어 있는지 확인하고
- { print $3, $4 } (행동) : 만약 'ERROR'가 있는 줄을 찾으면, 그 줄의 세 번째 단어($3)와 네 번째 단어($4)를 골라서 보고하시오
작업 진행 현황
log.txt를 한 줄씩 훑어보고
- 첫 번째 줄: 'ERROR' 없음. (통과)
- 두 번째 줄: 'ERROR' 발견! 👉 세 번째(failed), 네 번째(user2) 단어를 기록합니다.
- 세 번째 줄: 'ERROR' 없음. (통과)
- 네 번째 줄: 'ERROR' 발견! 👉 세 번째(denied), 네 번째(user4) 단어를 기록합니다.
최종적으로 우리에게 아래와 같이 보고합니다.
failed user2
denied user4

awk 실제 예시
이제 awk를 이용해 실제 문제를 해결하는 예시를 살펴보겠습니다.
1. 특정 필드(열)만 추출하기!
시스템의 사용자 정보가 담긴 /etc/passwd 파일에서 사용자 이름과
홈 디렉터리 정보만 깔끔하게 뽑아내 보겠습니다.
awk -F':' '{print "Username: " $1 ", Home: " $6}' /etc/passwd
| 부분 (Component) | 내용 (Content) |
설명 (Description)
|
| 명령어 (Command) | awk |
텍스트 파일을 한 줄씩 읽어 패턴을 검색하고, 특정 동작을 수행하는 강력한 텍스트 처리 도구입니다.
|
| 옵션 (Option) | -F':' |
필드(Field)를 나누는 구분자(Field Separator)를 콜론(:)으로 지정합니다. /etc/passwd 파일은 콜론으로 각 필드를 구분합니다.
|
| 동작 (Action) | {print "Username: " $1 ", Home: " $6}' |
각 줄에 대해 지정된 형식으로 문자열을 출력합니다.
- "Username: ": "Username: "이라는 문자열을 그대로 출력합니다. - $1: 콜론으로 구분된 첫 번째 필드(사용자 이름)를 출력합니다. -", Home: ": ", Home: "이라는 문자열을 그대로 출력합니다. - $6: 콜론으로 구분된 여섯 번째 필드(홈 디렉토리 경로)를 출력합니다. |
| 입력 파일 (Input File) | /etc/passwd |
사용자 계정 정보가 담겨 있는 리눅스/유닉스 시스템 파일입니다.
이 파일의 내용을 한 줄씩 읽어 처리합니다. |

위 명령어를 실행하면, 복잡한 /etc/passwd 파일의 내용이 사용자가 보기 편한 형태로 가공되어 출력됩니다.
2. 실행 중인 웹 서버 프로세스의 PID와 실행 경로 확인하기!
지난번 파이프라인 예제에 awk를 추가하여 더 유용한 정보를 만들어 보겠습니다.
prometheus 프로세스의 ID(PID)와 실행 명령어만 따로 뽑아 보겠습니다.
ps -ef | grep prometheus | grep -v grep | awk '{print "PID: " $2 ", CMD: " $8}'
| 명령어 / 기호 (Command / Symbol) |
설명 (Description)
|
| ps -ef |
시스템에서 실행 중인 모든 프로세스의 목록을 상세 정보와 함께 보여줍니다.
|
| | | `파이프 |
| grep prometheus |
ps -ef가 전달한 전체 프로세스 목록에서 'prometheus'라는 단어가 포함된 줄만 찾아냅니다.
|
| grep -v grep |
바로 앞 grep 명령어의 결과에서 'grep'이라는 단어가 포함된 줄을 제외합니다. (검색에 사용된 grep prometheus 프로세스 자체가 결과에 나오는 것을 방지)
|
| awk '{print "PID: " $2 ", CMD: " $8}' |
최종적으로 필터링된 결과를 한 줄씩 받아, 공백으로 구분된 필드 중 2번째 필드($2, PID)와 8번째 필드($8, 실행 명령어)를 뽑아 "PID: [PID], CMD: [실행 명령어]" 형식으로 출력합니다.
|

awk를 함께 사용하면 불필요한 정보를 제거하고
내가 원하는 PID와 명령어 정보만 정확히 얻을 수 있습니다.
이처럼 awk를 사용하면 단순 텍스트 데이터를
내가 원하는 형식의 정보로 완벽하게 재탄생시킬 수 있습니다.
처음에는 조금 복잡해 보일 수 있지만,
익숙해지면 리눅스 터미널 작업의 효율을
극적으로 높여주는 최고의 무기가 될 것입니다.
이것으로 리눅스의 강력한 텍스트 처리 도구,
awk에 대한 소개와 사용법, 실제 예제에 대해서 알아보았습니다.
앞으로도 좋은 글로 찾아뵙도록 하겠습니다.
IT 성능 전문가, IT를 전하는 루디쿡아이티였습니다!!

감사합니다~!!

'인프라 (Infrastructure) > 운영체제 (OS)' 카테고리의 다른 글
| 리눅스 mkdir 명령어 사용법 및 실제 예제 활용 (디렉토리 / 폴더 만들기) (0) | 2025.09.05 |
|---|---|
| 리눅스 ps 명령어 사용법 및 실제 활용 예시 (프로세스 확인 방법) (0) | 2025.09.05 |
| 리눅스 grep 명령어 사용법 및 실제 예제 활용 (0) | 2025.09.05 |
| 리눅스 find 명령어 사용법 및 실제 예제 활용 (0) | 2025.09.03 |
| 리눅스 mv 명령어 사용법 (파일/디렉토리 이동 및 이름 변경) (1) | 2025.08.30 |