C.W.K.
Stream
Lesson 04 of 10 · published

awk — 패턴 + 액션

~15 min · awk, fields, scripting

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

한 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 로 갈아타기.

Code

CPU 상위 프로세스·bash
ps aux | awk 'NR>1 {print $3,$11}' | sort -rn | head
# Sum disk usage shown by ls -l
ls -l ~/Downloads | awk '{s+=$5} END {print s/1024/1024 "MB"}'
CSV 류 재포맷·bash
awk -F: '{printf "%-20s -> shell %s\n", $1, $7}' /etc/passwd | head
# Filter by numeric field
awk -F, '$3 > 100 {print}' big.csv

External links

Exercise

CPU 상위 5 개 프로세스: ps aux | awk 'NR>1 {print $3,$11}' | sort -rn | head -5. Downloads 합계: ls -l ~/Downloads | awk '{s+=$5} END {print s/1024/1024 "MB"}'. 파일의 빈 줄 개수: awk '/^$/ {c++} END {print c}' file.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.