Apacheのaccess_logを解析しようとしています。http://hoge.net/index1.htmlhttp://hoge.net/index99.htmlまでが並んでいて、それぞれのアクセス数を知りたいと思っています。

wc uniq sortなどのコマンドを使って、

file access
index40.html 40
index87.html 37
index2 32
......

といった結果を出力するにはどのようにすればよいでしょうか。(タイトル行の表示は不要です。)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2010/02/09 10:40:34
  • 終了:2010/02/09 13:42:18

回答(2件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012010/02/09 12:36:20

ポイント60pt

もっと良い方法があるかもしれない(いや、きっとあるはず・・・)が、

ちょっと考えてみたので、参考まで・・・。

tr -s ' ' '\n' < /var/log/apache2/access_log | grep 'http://hoge.net/index\d*\.html' | sort | uniq -c

access_log のファイルパスや、grep の正規表現部分は適宜変更してください。


まずは grep の部分を省いてみると動きが判ると思いますが、その際には、

あらかじめ access_log から数行分を抜粋したファイルを別途用意して、

そのファイルに対して実施したほうが良いでしょう。(grep の部分無しで、

access_log を解析すると、とんでもない量の結果が出力されちゃいます。)


URL必須との事で、とりあえず各コマンドのマニュアル。

http://www.linux.or.jp/JM/html/gnumaniak/man1/tr.1.html

http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

http://www.linux.or.jp/JM/html/gnumaniak/man1/sort.1.html

http://www.linux.or.jp/JM/html/gnumaniak/man1/uniq.1.html

id:nikita_r

ありがとうございました。

なるほど、いちどtrでばらすんですね。うまく行きました。

2010/02/09 13:42:11
id:y-kawaz No.2

y-kawaz回答回数1421ベストアンサー獲得回数2262010/02/09 13:27:15

ポイント10pt

access_log が common や combined などのデフォルトのLogFormatと過程したい場合、以下のような感じでどうでしょうか?

cat /var/log/httpd/access_log | perl -pe's/.*?".*? //;s/ .*//' | egrep 'index[0-9]+.html' | sort | uniq -c

http://q.hatena.ne.jp/answer

  • id:kn1967
    気になったので開けさせていただきました。> id:y-kawazさん

    grep に渡されるテキストの量が減って効率良いですね。
    まだまだありそうな気がしてきた・・・。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません