アクセスログで10分単位のリクエスト数を確認する

アクセスログにおいて、10分毎のリクエスト数を確認するスクリプトです。アクセスログの場所、開始時間、終了時間の3つを指定すれば、その期間に置ける集計をします。

#!/bin/sh

echo "取得したいリクエスト数の1.ファイルパス、2.開始時刻、3.終了時刻を指定して下さい" 

echo "1.ファイルパス"
read FILEPATH
echo "2.開始時刻"
read START_TIME
echo "3.終了時刻"
read END_TIME

START_DATA=`date -d "$START_TIME" "+%d/%b/%Y:%H:%M"`

END_DATA=`date -d "$END_TIME" "+%d/%b/%Y:%H:%M"`


cat ${FILEPATH} | \
        awk -F '[' -v start_date=${START_DATA} '{if (start_date < $2) print $0}' | \
        awk -F '[' -v end_date=${END_DATA} '{if ($2 <= end_date) print $0}' > RESULT_NUMBER_OF_REQUEST.txt

export LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH

OUTPUT=RESULT_NUMBER_OF_REQUEST_out.txt
DATE=`date +%Y/%m/%d\ %H:%M:%S`

#Year
WC=cat RESULT_NUMBER_OF_REQUEST.txt | awk '{print $4}'| sort | awk '{print substr($1, 2)}' | cut -c 8-11 ''| uniq | wc -l | awk '{print $1}'`

l=1 

while [ $l -le $WC ];
do
        YEAR_$l=`cat RESULT_NUMBER_OF_REQUEST.txt | awk '{print $4}' | sort | awk '{print substr($1, 2)}'| cut -c 8-11 | uniq | sed -n '${l},${l}p'

        # Day
        DAYWC=`cat RESULT_NUMBER_OF_REQUEST.txt | awk '{print $4}'| sort | awk '{print substr($1, 2)}' | cut -c 1-2 | uniq | wc -l | awk '{print $1}'`

        i=1 

        while [ $i -le $DAYWC ];
        do
                DAY_$i=`cat RESULT_NUMBER_OF_REQUEST.txt | awk '{print $4}' | sort | awk '{print substr($1, 2)}'| cut -c 1-2 | uniq | sed -n '${i},${i}p'

                # Hour
                HORWC=`cat RESULT_NUMBER_OF_REQUEST.txt | awk '{print $4}'| sort | awk '{print substr($1, 2)}' |  grep ${DAY_$i} | cut -c 13-14 | sort | uniq | wc -l | awk '{print $1}'`

                j=1

                while [ $j -le $HORWC ];
                do

                        HOUR_$j=`cat RESULT_NUMBER_OF_REQUEST.txt | awk '{print $4}'| sort | awk '{print substr($1, 2)}' |  grep ${DAY_$i} | cut -c 13-14 | sort | uniq | sed -n '${i},${i}p'`


                j=1

                while [ $j -le $HORWC ];
                do

                        HOUR_$j=`cat RESULT_NUMBER_OF_REQUEST.txt | awk '{print $4}'| sort | awk '{print substr($1, 2)}' |  grep ${DAY_$i} | cut -c 13-14 | sort | uniq | sed -n '${i},${i}p'`

                        #Minit          
                        k=0
                        while [ $k -le 6 ];
                        do

                                COUNT=`cat RESULT_NUMBER_OF_REQUEST.txt | grep ${DAY_$i} | grep ${HOUR_$j} | grep :$k | wc -l `
                                echo ${YEAR_$l}:${DAY_$i}:${HOUR_$j}:"$k"0,"$COUNT >> $OUTPUT
                                k=$(($k+1))

                        done

                j=$(($j+1))

                done

        i=$(($i+1))

        done

l=$(($l+1))

done

#集計結果の表示
echo "集計結果を以下に表示します"
cat RESULT_NUMBER_OF_REQUEST_out.txt