アクセスログから時間ごとのアクセス数を集計する
cat access_log | grep -P -o 'Dec 12 \d{2}:' | sort | uniq -c
特定のアクセスでカウントしたい場合はcatをgrepにしてパイプで渡す感じにすればOK
grep 'path' access_log | grep -P -o 'Dec 12 \d{2}:' | sort | uniq -c
-P オプションは正規表現でPerlの正規表現を使いますよっていうオプション
linuxの正規表現だとたまに意図してない挙動になるので急いでたりするとつい-Pを使ってしまったり。。
マッチしたものだけ取り出す場合は -o オプションで取ってこれる。単純な集計だったらこれで十分ですね。
uniq -c オプションでそれぞれカウントした値も取得できます。これ最近まで知らなかったw
特定フィールドの値を出したい場合などはawkを使って
awk -F ' ' '{print $3}'
とかできます。
-Fオプションで複数フィールドある場合のセパレータを指定、後方参照で「$1」などとして値を取得できる
cat access_log | awk -F '"' '{print $3}' | sort | uniq -c
上記だとダブルクォーテーションで分けた各フィールドの3番目の要素を出力する
とりあえず目的はこれだけではたせるけどawkはifとかも使えるみたいで覚えれば結構便利そう