Apacheログを指定の日数で取り出すシェルスクリプト

Apacheのアクセスログから“今日[実行日]を含まない”指定した日数分を取り出すシェルスクリプトがあれば便利だなと思って作ってみた(*´ェ`)
というより必要だったのだ(*´ェ`)>

イメージにするとこんな感じ
Apacheのアクセスログは月別に保存されている。
cutlogday

#!/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 へ続く。

LifeSim – 01

各パーティクルを男性(青色)、女性(赤色)に分けてランダムウォークさせ、同じ座標であれば結婚して線を結び色を変える、男性は緑色、女性はピンク色(*´ェ`)
何のひねりもないアイコンを作ってパーティクルに割り当てた(*´ェ`)

既婚者と同じ座標になっても何も起きないので何か起こしたほうがいいのか(*゚ェ゚*)
フィールドは上下左右ループになっているので線が無駄に長くなってしまうので壁を作ってフィールド内に閉じ込めよう(*´ェ`)

既婚者の線がある一定以上になると離婚ということにしてもいいかもしれない(*´ェ`)

実装予定
・結婚してから一定以上経つと子供を産むようにする、子供は両親の情報を受け継ぐ
・フィールドは壁でくくる
・寿命を与える
・既婚者同士の距離が一定以上離れると、性格の不一致により離婚する

人工生命の始まり始まり

人工生命(Artificial Life)に挑戦してみよう(*´ェ`)
人工生命といってもロボットや機械といったHard Artificial Lifeではなく、生化学的なWet Artificial Lifeでもなく、ライフゲームのようなSoft Artificial Lifeなのだ(*゚ェ゚*)

プログラミング言語はC#
グラフィックライブラリはOpenGL
アプリケーション名はLifeSimにした(*´ェ`)

LifeSim – 00

一つ一つの点が個体生物として
移動はランダムウォークで同じセルに重なると一方は死滅する
学習能力はない

というとっても単純な生物(*´ェ`)

この単純な生物に捕食・繁殖・進化・遺伝・学習といった機能を付けていく(*´ェ`)

一種類の生物だけでなく多種類の生物も欲しいし見た目の変化なんかもあった方がいいな(*´ェ`)