愚直に時間文字列を生成してログファイル全体からgrepして抽出しているので、ログファイルがでかいと死にます
本気でログ解析したければもう少し頭を使うか、他の手段を考えましょう。 例えば、 Amazon Athena とか Elasticsearch+Kibana とか。
それほど大きくなければ、こっそりエイヤッと….
START_DATE="$1" END_DATE="$2" TARGET_LOG_FILENAME="$3" DATE_FORMAT="+%d/%b/%Y:%H:%M" DATE_STR_LENGTH=$(expr $(LANG=C date "$DATE_FORMAT" | wc -m) - 2) date_diff_second=$(expr $(date --date "$END_DATE" "+%s") - $(date --date "$START_DATE" "+%s")) date_diff_minute=$(expr $date_diff_second / 60) for i in $(seq 0 10 $date_diff_minute); do datetime_window=$(LANG=C date --date "$START_DATE ${i}minutes" "$DATE_FORMAT" | cut -c "-${DATE_STR_LENGTH}") echo "##### ${datetime_window} #####" # ↓適宜弄る ls -1 ${TARGET_LOG_FILENAME}* | grep -v ".gz" | xargs cat | grep "$datetime_window" | grep -v -e "127.0.0." -e "localhost" | grep "wp-admin" | wc -l echo done
# 例: wp-adminへのアクセス回数計算 # START_DATE="2017-06-12 11:30:00 JST" # END_DATE="2017-06-13 11:30:00 JST" # TARGET_LOG_FILE="/var/log/nginx/access.log" # ./grep_log.sh "$START_DATE" "$END_DATE" "$TARGET_LOG_FILE" . . . ##### 13/Jun/2017:11:0 ##### 154 ##### 13/Jun/2017:11:1 ##### 132 ##### 13/Jun/2017:11:2 ##### 159 ##### 13/Jun/2017:11:3 ##### 131