実現したいこと
- その月に該当のケースにアクセスがあったかを知りたい
- ユーザーとか対象のページとかなんでもいいが、ログに吐き出してるもの
前提条件
- Apacheのログが1時間に1回保存されてる
- 24時間分保存されているので、2週間全部grepで調べようと思うと24時間×14日になり結構時間がかかる
というわけで
- 1時間にログがあれば終了
- なければ終了して次の時間に移動
- というかなり変なケースに絞ったシェルスクリプト
#!/bin/bash
GREEN=$(tput setaf 2; tput bold)
RED=$(tput setaf 1)
month='03'
if [ $# -ne 1 ]; then
echo "実行するには引数(検索対象文字)が必要です。" 1>&2
exit;
fi
for day in `seq -w 1 16`
do
for hour in `seq -w 0 23`
do
bzgrep $1 /var/log/apache/archive/2014-${month}-${day}/2014-${month}-${day}_${hour}.bz2 >> $1_${day}.tmp
tmp=`wc -l $1_${day}.tmp | cut -f 1 -d ' '`
if [ "$tmp" -gt 1 ]; then
echo "$GREEN hit: $month/$day"
break;
else
echo "$RED nothing : $month/$day ${hour}h"
fi
done
done
# tmp file削除
rm *.tmp
もっと効率よくやるやり方ありそうだが、思いつかなかった