awk는 기본적으로 공백을 기준으로 필드를 나눈다
Nginx 액세스 로그에서 값 추출
열은 기본적으로 공백 기준으로 나뉨
grep /a/b/c access.log | awk '{ print $열번호 }'
$0: 전체 출력
$1: 1번째 열 출력
예를 들어 log_format의 처음에 $remote_addr를 출력하도록 했다면,
grep /a/b/c access.log | awk '{ print $1 }' | sort | uniq와 같이 사용하여 해당 경로로 호출하는 출발지 IP를 쉽게 확인할 수 있게 된다
Nginx 액세스 로그에서 요청 경로 추출
중복 제거, 요청 파라미터 제거
cat access.log | awk '{ gsub(/\?.*/, "", $5); print $5 }' | sort | uniq
Global Substitution을 사용하여 ? 이후의 문자를 공백으로 변경하여 출력
애플리케이션 로그에서 특정 항목의 값 추출
2025-07-23 09:42:12.577 INFO 1600713 --- [http-nio-18080-exec-10] c.p.s.r.RequestLoggingFilter : REQUEST: GET /abc?id=abc&version=2.0, client=127.0.0.1, headers=[host:"a.com", x-real-ip:"10.162.162.192", x-forwarded-for:"10.162.162.192", connection:"close", user-agent:"Apache-HttpClient/4.5.14 (Java/1.8.0_382)", accept-encoding:"gzip,deflate"]
이런 로그 형식에서 x-real-ip:"10.162.162.192" 이부분의 x-real-ip의 값만 추출하고 싶다
grep /path access.log | awk -F 'x-real-ip:"' '{ split($2, arr, "\""); print arr[1] }' | sort | uniq
-F: 구분자 설정
arr[0]은 "몇 개로 쪼개졌는지(조각 수)"를 담고 있다
awk 변수
- NF
- 한 줄에 단어가 몇 개 있는지 알려줌
'OS > Linux' 카테고리의 다른 글
| Linux > Crontab > 프로그래밍적 일정 추가 (0) | 2025.02.18 |
|---|---|
| Linux > Bash > 호스트명 내 특정 위치의 값 확인 (0) | 2025.01.07 |
| Linux > Ubuntu > Locale (0) | 2024.10.29 |
| Linux > Bash > `` vs $() (0) | 2024.09.27 |
| Linux > 압축 (0) | 2024.09.03 |