Apacheのログ管理
リファラを表示
awk '{if ($11 ~ /^"http/) print $11}' access_log | sed 's/"//g'
特定のユーザーで認証したことのあるIPからのログを消去
L=access_log; T=temp.tmp; if test ! -f $T; then \ for i in `awk '{if($3=="admin"){print $1}}' $L | sort -u`;\ do sed /^$i\ /d $L > $T; mv -f $T $L; done; fi
.をエスケープしてないけど、IP+半角スペースでマッチングしているので多分大丈夫。
ローテートされたログをマージ
ls access.log.* | sort -nr -t. -k3,3 | xargs cat > merged.log
クローラーのIPを表示
awk '{if($7=="/robots.txt"){print$1}}' access_log | sort -un -t. -k1,1 -k2,2 -k3,3 -k4,4
アクセス元ホストを逐次表示
tail -f access_log | gawk '{system("dig -x "$1" +short")}' | sed 's/\.$//'