Apacheのアクセスログから“今日[実行日]を含まない”指定した日数分を取り出すシェルスクリプトがあれば便利だなと思って作ってみた(*´ェ`)
というより必要だったのだ(*´ェ`)>
イメージにするとこんな感じ
Apacheのアクセスログは月別に保存されている。
#!/bin/bash
######################
#
# version : Alpha
# author : foloro
#
######################
#引数の数をチェック
if [ $# -ne 3 ]; then
echo "使用方法 : $0 過去の日数 入力ファイル 出力ファイル"
exit 1
fi
#引数の過去の日数をチェック
if [ $1 -lt 1 ]; then
echo "日数は1以上の値で指定してください"
exit 1
fi
#引数の入力ファイルが存在するか
if [ -f $2 ]; then
echo "ファイルが存在しません"
exit 1
fi
#変数に引数の日数、入力ファイル、出力ファイルのパスを格納する
DAYNUM=$1
INPUTFILE=$2
OUTPUTFILE=$3
for (( i = 1; i <= $DAYNUM; i++ ))
do
DAYS[i-1]=`LANG=C date -d "$i days ago" +"%d/%b/%Y"`
done
searchQuery=${DAYS[0]}
for (( i = 1; i < $DAYNUM; i++ ))
do
searchQuery="$searchQuery""|""${DAYS[$i]}"
done
echo $searchQuery
cat $INPUTFILE | grep -E $searchQuery > $OUTPUTFILE
使い方
シェルスクリプトをcutlogday.shという名前で作成して
Apacheのアクセスログがspecial-forces.jp-access_log-yyyymmddで過去100日間のログが欲しい場合
./cutlogday.sh 100 /var/log/httpd/special-forces.jp-access_log* matometa.log
とすれば、matometa.logに指定した今日を含めない過去100日分のログが書き出されている(*´ェ`)
という風に使おうと思っていたらどうもスマートじゃない気がする(*´ェ`)
友達から“UNIXという考え方”という本を薦められて買って読んだらピンと来た∑(*゚ェ゚*)ピコン!
そして書き直したコードがこっち
#!/bin/bash
######################
#
# version : Bravo
# author : foloro
#
######################
#引数の数をチェック
if [ $# -ne 1 ]; then
echo "使用方法 : $0 過去の日数"
exit 1
fi
#引数の過去の日数をチェック
if [ $1 -lt 1 ]; then
echo "日数は1以上の値で指定してください"
exit 1
fi
#日付を配列に格納する
DAYNUM=$1
for (( i = 1; i <= $DAYNUM; i++ ))
do
DAYS[i-1]=`LANG=C date -d "$i days ago" +"%d/%b/%Y"`
done
searchQuery=${DAYS[0]}
for (( i = 1; i < $DAYNUM; i++ ))
do
searchQuery="$searchQuery""|""${DAYS[$i]}"
done
grep -E $searchQuery
使い方
シェルスクリプトをcutlogday.shという名前で作成して
Apacheのアクセスログがspecial-forces.jp-access_log-yyyymmddで過去10日間のログが欲しい場合
cat /var/log/httpd/special-forces.jp-access_log* | ./cutlogday.sh 10 > matometa.log
こうゆうことなのだ∑(*゚ェ゚*)
でも過去2日間のログを取り出すだけで過去何ヶ月ものログを開いているのは無駄な気がする(*´ェ`)
Version Charlie へ続く。