본문 바로가기
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

한 명령 속의 작은 언어

awk는 입력을 줄 단위로 읽으며 pattern { action } 규칙을 실행해. 패턴이 적용할 줄을 고르고, 중괄호 안의 동작이 그 줄을 출력하거나 계산해.

필드 변수

기본 설정에서는 각 줄을 공백 기준으로 나눠 $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 헤더와 파일별 크기·이름을 출력하므로 결과를 sort 같은 다음 단계로 넘길 수 있어.

왜 awk가 sed 위에

sed는 텍스트 치환에 강하고, awk는 산술과 필드 조작에 강해. 값을 세거나 필드를 합산하고 숫자 조건으로 거를 때는 awk가 더 잘 맞아.

필드 번호는 입력 형식의 가정이야

$1, $2가 무엇인지 말하려면 구분자, 빈 필드, 앞쪽 공백 규칙이 먼저 정해져야 해. 공백 하나로 보이는 로그도 따옴표와 값 안의 공백이 있으면 단순 필드가 아니야. 표본 몇 줄이 아니라 형식 계약을 확인해.

awk의 숫자 변환은 편하면서 위험해

문자열이 산술 문맥에서 자동으로 숫자로 바뀌면 잘못된 값이 0처럼 처리될 수 있어. 임계값 판단이나 금액 계산에서는 입력이 숫자 형식인지 먼저 검사하고 로케일의 decimal 표기도 고정해.

Code

CPU 상위 프로세스·bash
ps aux | awk 'NR>1 {print $3,$11}' | sort -rn | head
# 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
# 숫자 필드로 필터링
awk -F, '$3 > 100 {print}' big.csv

External links

Exercise

ps aux 출력에서 CPU 사용량과 명령을 골라 상위 다섯 개를 정렬해. 이어서 시험 디렉터리의 파일 크기를 awk로 합산하고 빈 줄 수를 세는 예제도 실행해. 각 입력의 필드 위치가 예상과 맞는지 원본 몇 줄을 먼저 읽어.

Progress

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

댓글 0

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

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