홈 › 리눅스 명령어 › 09 / 10

sed · awk 한 줄 처리 (치환·필드·집계)

섹션 7진행 0 / 10

4. 응용 변형 예제

4.1 상태코드별 건수와 비율

bash
awk '{a[$8]++; t++} END {for (s in a) printf "%s %d건 %.1f%%\n", s, a[s], a[s]*100/t}' access.log | sort

전체 건수 t 를 END 에서 나눠 비율까지 한 줄로 냅니다. 장애 시 5xx 비율을 빠르게 확인할 때 씁니다.

4.2 CSV 컬럼 재배열 후 파일로 저장

bash
awk -F',' 'NR==1{print;next} {print $1","$3","$2}' sales.csv > sales_reordered.csv

헤더는 NR==1 조건으로 그대로 두고 본문만 열 순서를 바꿉니다. 리포트 도구가 요구하는 컬럼 순서에 맞출 때 씁니다.

4.3 설정 파일 여러 키를 한 번에 변경

bash
sed -i.bak -e 's/^server.port=.*/server.port=9090/' \
  -e 's/^logging.level.root=.*/logging.level.root=DEBUG/' app.properties

배포 스크립트에서 환경별로 포트와 로그 레벨을 한 번에 바꿉니다. -i.bak 으로 원본을 남겨 되돌릴 수 있습니다.

4.4 특정 시간대 로그만 추출해 집계

bash
sed -n '/10:00:0[0-9]/,/10:00:1[0-9]/p' access.log | awk '{print $8}' | sort | uniq -c

패턴 범위로 시간대를 자르고 상태코드만 집계합니다. 큰 로그 파일을 통째로 awk 에 넘기지 않아 빠릅니다.

4.5 임시 점검용 설정 줄 삽입

bash
sed -i '/^server.port=/a\
management.endpoints.web.exposure.include=health,info' app.properties

server.port 줄 다음에 점검용 설정을 끼워 넣습니다. 배포 전 임시로 넣었다가 d 로 지우는 식으로 씁니다.