【復習】第16回春だからログ解析するぞシェル芸勉強会:02
【復習】第16回春だからログ解析するぞシェル芸勉強会:01 - ot2sy39's diary の続き。
Q1 NASAのログについて、ステータスコードを抽出して、どのコードがいくつあるか数えてみましょう
初手思いついたのがコレ。あるパターンの行の数を数えるとき、ついパターンをキーとした連想配列に出現回数を数えてしまう。
gawk '{status[$(NF-1)]+=1} END{for(i in status){printf i, status[i]}}' access_log
でもサンプル回答ではキーをプリントしちゃって、sort & uniq -c。
awk '{print $(NF-1)}' access_log | LANG=C sort | uniq -c
うむ、サンプルの方が間違いなくシンプル。
念のため手元の環境*1で処理時間を測ってみると、 だいたい連想配列版が半分くらいの時間で完了していた(やったね!)*2。 富豪なら無視するレベルだが。
連想配列版 | sort | uniq -c版 | |
---|---|---|
real | 4.243s | 9.335s |
user | 3.955s | 10.130s |
sys | 0.286s | 0.554s |
Q2 NASAのログについて、ファイルを開かずに、ログの多い日を探しだしてみましょう
「ログの多い日」=「ファイルの行数の多い日」としか考えられず、 頭の中は以下のコマンドで占拠されてしまった。
wc -l 1995*
サンプル回答は「ls -l | sort -k5,5n | tail
」。
「lsを使ってサイズを見たら開かないでも見当がつきます」とのこと。
まあそうだよね。