【復習】第16回春だからログ解析するぞシェル芸勉強会:01
まずは準備だけ。今回のシェル芸勉強会は準備段階から篩い落としにきた。
準備1
zcat access_log.nasa.gz | gawk -vFS='[[ /:]' 'BEGIN{m["Jul"]=7; m["Aug"]=8;} {printf("%04d%02d%02d %02d%02d%02d %s\n", $7, m[$6], $5, $8, $9, $10, $0)}' > access_log
とりあえず書いたのがコレ↑。 月変換用連想配列の準備はもっとスマートな記述がありそう。
結果を確認してみるとおおむね上手くいってるが、稀に日付が2カラム目に出力されるレコードがある。 上手くいかないデータをみると、リクエスト元データに ':' や '/' が入っているケースが存在することがわかった。 マジで……。 ホスト名に英数字とアンダースコア以外使っていいわけ? いや俺が無知なだけでApacheのログにはユーザ名などの付加データが ':' や '/' で区切って追加されるんだきっと。
zcat access_log.nasa.gz | gawk '{print $4,$0}' | sed 's/^\[//' | gawk hogehoge
というわけで日時のカラム($4)のみ切り出して加工する必要があり、 限りなくサンプル回答↓に近づくのであった。
【問題と解答例】第16回春だからログ解析するぞシェル芸勉強会 | 上田ブログ
準備2
準備2はサンプル回答の形式を知っていたのでそのままだった。