ablog

不器用で落着きのない技術者のメモ

Apache のアクセスログからページランキングを集計する

Apacheアクセスログからページランキングを集計する超単純なワンライナー。マルチライナーかな?

ls access_log.* | while read LINE
do
FILENAME=`perl -lane '$F[3] =~ s/\[|:.*//g; $F[3] =~ s/\//-/g; print $F[3]; exit if $.>0' $LINE`
perl -lane 'print $F[6];' $LINE > temp.1
sort temp.1 > temp.2
uniq -c temp.2 > temp.3
sort -nr temp.3 > $FILENAME.txt
done

.js、.css、.gif なども入ってきて見づらいので除去した。

ls *.txt | while read LINE; 
do 
perl -i.org -wnl -e '/\.css$|\.js$|\.gif$/ or print;' $LINE
done

さらにURLパラメータを削除した。

ls *.txt | while read LINE; 
do 
perl -i.org -ple 's/\?.*//' $LINE ; 
done

最終的にまとめると、

ls access_log.* | while read LINE
do
FILENAME=`perl -lane '$F[3] =~ s/\[|:.*//g; $F[3] =~ s/\//-/g; print $F[3]; exit if $.>0' $LINE`
perl -lane 'print $F[6];' $LINE > temp.1
perl -wnl -e '/\.css$|\.js$|\.gif$/ or print;' temp.1 > temp.2
perl -ple 's/\?.*|;.*//' temp.2 > temp.3
sort temp.3 > temp.4
uniq -c temp.4 > temp.5
sort -nr temp.5 > $FILENAME.txt
done

実行環境は OS X

$ uname -a
Darwin *****-no-macbook-air.local 9.6.0 Darwin Kernel Version 9.6.0: 
Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386

追記(2009/03/27):
特定の時間帯のみ抽出する。

perl -lane 'print if ($F[3] =~ m/09:20:[0-3][0-4]$/);' access_log.1