728x90

터미널에서 대량의 로그 데이터를 다루는데 무척 유용한 명령이 awk 입니다. awk 는 기본적으로 파일 내의 컬럼 구분자가 공백이라는 가정하게 동작합니다. 데이터를 추출하려는 원본 로그 파일이 공백을 구분자로 이용하는 경우 문제가 없지만 CSV (Comma Seperated Value) 형태 혹은 파이프와 같은 구분자로 컬럼을 식별하는 경우에는 구분자가 어떤 문자인지 awk 에게 전달해 주어야 합니다.


[ 예시 로그 파일 ]

$ cat domain.log

2016-03-28, 09:00:00, www.samsung.com

2016-03-28, 09:00:00, www.naver.com

2016-03-28, 09:00:00, www.apple.com

...


위와 같이 사용자들이 접근한 도메인에 대한 이력을 정리한 로그파일이 있다고 가정해 보겠습니다. 각 도메인별로 사용자의 요청 횟수를 카운트 하고 싶다면 아래와 같은 명령이 머릿속에 떠오르실 겁니다. 


$ cat domain.log | awk '{print $3}' | sort | uniq -c | sort -rn


하지만 위의 명령은 awk 의 기본 구분자인 공백을 사용하기 때문에 원하는 결과가 제대로 나오지 않게 됩니다. 로그 파일이 콤마를 명시적인 구분자로 사용하고 있기 때문에 아래와 같이 awk 의 파라메터로 구분자를 알려주어야 합니다. 


$ cat domain.log | awk -F ',' '{print $4}' | sort | uniq -c | sort -rn


자주 사용하지만 자꾸만 잊어버리는 명령어들 시리즈였습니다 ;-)


728x90

+ Recent posts