ot2sy39's note

twitter 140文字じゃ書けないときの外部エントリみたいな

【復習】第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はサンプル回答の形式を知っていたのでそのままだった。