access_logをawkコマンドで解析
いつもawkの使い方を忘れてしまうのでメモ。
access.log (sample)
192.168.0.1 - - [1/Apr/2015:00:00:00 +0900] "GET /hoge_1.html HTTP/1.1" 200 1234 "https://www.google.co.jp/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" 192.168.0.1 - - [1/Apr/2015:00:00:00 +0900] "GET /hoge_2.html HTTP/1.1" 200 1234 "https://www.google.co.jp/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" 192.168.0.1 - - [1/Apr/2015:00:00:00 +0900] "GET /hoge_2.html HTTP/1.1" 200 1234 "https://www.google.co.jp/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" 192.168.0.1 - - [1/Apr/2015:00:00:00 +0900] "GET /hoge_1.html HTTP/1.1" 200 1234 "https://www.google.co.jp/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" 192.168.0.1 - - [1/Apr/2015:00:00:00 +0900] "GET /hoge_3.html HTTP/1.1" 200 1234 "https://www.google.co.jp/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" 192.168.0.1 - - [1/Apr/2015:00:00:00 +0900] "GET /hoge_1.html HTTP/1.1" 200 1234 "https://www.google.co.jp/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"
このサンプルaccess_logからアクセス数順に集計したいとき
cat access.log | awk '{ print $7 }' /hoge_1.html /hoge_2.html /hoge_2.html /hoge_1.html /hoge_3.html /hoge_1.html
awkコマンドはデフォルトでは半角空白をフィールドの区切りに用いる。
"(ダブルクォーテーション)で区切って下記のようにも出来る。
cat access.log | awk -F '"' '{ print $2 }' | awk '{print $2}' /hoge_1.html /hoge_2.html /hoge_2.html /hoge_1.html /hoge_3.html /hoge_1.html
ここからsortコマンドで抽出した文字列を並び替える
cat access.log | awk '{ print $7 }' | sort /hoge_1.html /hoge_1.html /hoge_1.html /hoge_2.html /hoge_2.html /hoge_3.html
そして最後に uniq -c でユニークにして件数を表示する
cat access.log | awk '{ print $7 }' | sort | uniq -c 3 /hoge_1.html 2 /hoge_2.html 1 /hoge_3.html
※ 今回のサンプルaccess_logからuser_agentを抽出したい場合は
下記のコマンドで抽出できる
cat access.log | awk -F '"' '{ print $6 }' | sort | uniq -c 6 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36
あまり普段使わないので忘れがちですが、awkのみの書籍もあるくらいなので
もっと勉強しなくてはと思う今日この頃。