반응형
AWK ?
AWK(오크;Aho Weinberger Kernighan)는 유닉스에서 처음 개발된 일반 스크립트 언어이다. AWK의 기본 기능은 텍스트 형태로 되어있는 입력 데이터를 행과 단어 별로 처리해 출력하는 것이다. AWK라는 이름은 이 스크립트 언어를 만든 앨프리드 에이호, 피터 와인버거, 브라이언 커니핸 세 명의 성의 앞글자를 따서 붙여졌다.
* 위키피디아 참고 : https://ko.wikipedia.org/wiki/AWK
awk 테스트를 위한 accesslog 샘플파일
* https://github.com/elastic/examples/blob/master/Common%20Data%20Formats/apache_logs/apache_logs 여기 있는 파일을 기준으로 테스트 및 예제진행.
파일형식 :
awk 구분자를 통한 요소 추출.
* -F"[구분자]" '{print $(요소의 순서)}'
: 구분자인 공백문자를 기준으로 스트링을 split 하였으며 split 한 배열의 1번째 요소의 값을 추출한경우.
* IP 만 추출.
$ awk -F" " '{print $1}' apache_logs.txt
180.76.5.22
108.174.55.234
187.45.193.158
46.32.254.207
* Request 경로만 추출.
$awk -F" " '{print $7}' apache_logs.txt
/presentations/logstash-puppetconf-2012/images/logs.jpg
/presentations/logstash-puppetconf-2012/images/apache-negative-duration.png
/favicon.ico
/blog/tags/xsendevent
/blog/geekery/disabling-battery-in-ubuntu-vms.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29
/blog/geekery/solving-good-or-bad-problems.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29
/projects/xdotool/
/blog/tags/standards
/blog/tags/puppet?flav=rss20
/blog/geekery/solving-good-or-bad-problems.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29
/?flav=atom
/robots.txt
/blog/tags/puppet?flav=rss20
awk 조건에 따른 출력 (IF)
* 특정시간대의 로그 추출
$awk -F" " '{ if ($4="20/May/2015:21:05") print $0 }' apache_logs.txt
83.149.9.216 - - 20/May/2015:21:05 +0000] "GET /presentations/logstash-monitorama-2013/css/print/paper.css HTTP/1.1" 200 4254 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gec
ko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - 20/May/2015:21:05 +0000] "GET /presentations/logstash-monitorama-2013/images/1983_delorean_dmc-12-pic-38289.jpeg HTTP/1.1" 200 220562 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKi
t/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - 20/May/2015:21:05 +0000] "GET /presentations/logstash-monitorama-2013/images/simple-inputs-filters-outputs.jpg HTTP/1.1" 200 1168622 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - 20/May/2015:21:05 +0000] "GET /presentations/logstash-monitorama-2013/images/tiered-outputs-to-inputs.jpg HTTP/1.1" 200 1079983 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.
36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - 20/May/2015:21:05 +0000] "GET /favicon.ico HTTP/1.1" 200 3638 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
24.236.252.67 - - 20/May/2015:21:05 +0000] "GET /favicon.ico HTTP/1.1" 200 3638 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0"
93.114.45.13 - - 20/May/2015:21:05 +0000] "GET /articles/dynamic-dns-with-dhcp/ HTTP/1.1" 200 18848 "http://www.google.ro/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCwQFjAB&url=http%3A%2F%2Fwww.semicomplete.com%2Farticles%2Fdynamic-dns-with-dhcp%2F&ei=W88AU4n9HOq60QXbv4G
wBg&usg=AFQjCNEF1X4Rs52UYQyLiySTQxa97ozM4g&bvm=bv.61535280,d.d2k" "Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0"
awk FOR 문으로 그룹 count
* 특정ip 가 몇번 호출 되었는가를 ARRAY에 담아 그룹 count 처리.
$awk -F" " '{array[$1]+=1} END { for(i in array) { print array[i] "\t" i}}' apache_logs.txt | sort -n
50 14.160.65.22
50 86.76.247.183
52 50.139.66.106
56 66.249.73.185
60 208.91.156.11
60 65.55.213.73
65 108.171.116.194
74 208.115.113.88
82 198.46.149.143
83 208.115.111.72
84 100.43.83.137
99 68.180.224.225
102 209.85.238.199
113 50.16.19.13
273 75.97.9.59
357 130.237.218.86
364 46.105.14.53
482 66.249.73.135
마무리
awk 에는 다양한 옵션과 명령이 존재 하지만 다 외우고 사용하기 힘들다...
가장 기본적으로 사용하는 것들을 잘 이용하면 웬만한건 다된다...
안되는건 grep과 혼용하여 사용.
반응형
'리눅스' 카테고리의 다른 글
[jstat] 메모리 모니터링. (0) | 2021.07.14 |
---|---|
[log분석 2] 톰캣 Accesslog 통계 count 추출 (feature awk grep) (0) | 2021.07.14 |
[ CentOS 7 ]최소 설치 하기 (0) | 2017.03.18 |
[CentOS] 사용자 계정 다루기. (1) | 2017.02.22 |
리눅스 소스 받아 인스톨 하기. (0) | 2016.03.28 |
댓글