nginx access log 에서 unique한 ip 목록을 추출할 일이 있었음.
파일을 가져와서 엑셀에 붙여서 잘 분리해서 중복 제거를 해도 되지만,
서버내에서 작업을 해보기로 함.
sed, awk, sort, uniq 를 이용하면 ip들을 뽑을 수 있음.
로그는 아래와 같은 형식이었고 IP는 [] 로 둘러 쌓여져 있음.
[27/Jan/2022:10:03:49 +0900][0.029][xxx.xxx.xx.xxx][200] "GET /api/xxx/vx.x/xxxxxx/xxxx?orgId=xxxx HTTP/1.1"
원리가는 간단 함.
awk 가 공백을 위주로 토큰을 만들수 있기 때문에
sed 's/\]\[/ /g'
[27/Jan/2022:10:03:49 +0900 0.029 xxx.xxx.xx.xxx 200] "GET /api/xxx/vx.x/xxxxxx/xxxx?orgId=xxxx HTTP/1.1"
awk '{print $4}'
xxx.xxx.xx.xxx
sort | uniq
sort 와 uniq 명령어를 수행하면 중복이 제거가 됨.
cat access.log-20220128 | sed 's/\]\[/ /g' | awk '{print $4}' | sort | uniq