OS/Linux

Linux > Bash > awk

Krevis 2024. 11. 7. 11:00

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