アクセスログにおいて、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