sed · awk 한 줄 처리 (치환·필드·집계)
3. 코드 예제
예제 1: sed -n 과 주소 — 01_sed_awk.sh 발췌
sed -n '2p' sales.csv
echo ---
sed -n '2,4p' sales.csv
echo ---
sed -n '/busan/p' sales.csv
echo ---
sed -n '$p' sales.csvkim,seoul,1200
---
kim,seoul,1200
lee,busan,800
park,seoul,1500
---
lee,busan,800
jung,busan,900
---
han,seoul,700줄 번호, 범위, 패턴, $(마지막 줄) 네 가지 주소 방식이 모두 -n + p 조합으로 동작합니다. 자동 출력을 꺼야 원하는 줄만 남습니다.
예제 2: sed s 치환 플래그 — 01_sed_awk.sh 발췌
echo "a-b-c-d" | sed 's/-/_/'
echo "a-b-c-d" | sed 's/-/_/g'
echo "a-b-c-d" | sed 's/-/_/2'
echo "HELLO world" | sed 's/hello/hi/i'
echo "/opt/app/logs" | sed 's|/opt/app|/srv/app|'a_b-c-d
a_b_c_d
a-b_c-d
hi world
/srv/app/logs플래그가 없으면 첫 일치만, g 는 전부, 숫자는 해당 번째만 바꿉니다. 마지막 줄은 / 대신 | 구분자를 써서 경로 안의 / 와 충돌을 피했습니다.
예제 3: awk 조건 필터와 집계 — 01_sed_awk.sh 발췌
awk -F',' 'NR>1 && $2=="seoul" {print $1, $3}' sales.csv
echo ---
awk '$9 > 200 {print $6, $9}' access.log
echo ---
awk -F',' 'NR>1 {sum+=$3; if($3>max) max=$3} END {print "합계", sum, "평균", sum/(NR-1), "최댓값", max}' sales.csvkim 1200
park 1500
han 700
---
/index.html 512
/login 300
/api/users 980
/index.html 512
/api/orders 210
/api/users 980
---
합계 5700 평균 950 최댓값 1500첫 줄은 지역이 seoul 인 행만, 둘째는 응답 크기가 200 을 넘는 로그만 골랐습니다. 마지막은 누적 변수로 합계·평균·최댓값을 한 번에 구했습니다.
예제 4: 파이프라인 조합 — 01_sed_awk.sh 발췌
awk '{print $6}' access.log | sed -E 's#^/api/([a-z]+).*#/api/\1#' | sort | uniq -c | sort -rn | tee path_count.txt 3 /api/users
2 /login
2 /index.html
1 /favicon.ico
1 /api/orders
1 /adminawk 로 경로 필드만 뽑고 sed 로 API 경로를 묶은 뒤 sort | uniq -c | sort -rn 으로 건수순 정렬했습니다. tee 덕분에 화면에 보면서 파일에도 저장됩니다.