UTC時刻で出力されているアクセスログをJSTに読み替えて集計したいのですが、いい方法なないでしょうか。
以下のようなファイルが出力されるので、先頭の(20200501)が日付でファイル名で集計してました。
20200501T000000.000-WstSAefuOVd4ZYO34n94.log.gz
20200531T230000.000-WstSAefuOVd4ZYO34n94.log.gz
bash
1#!/bin/sh 2 3################################################# 4##File list with 50 or more access to / xyz / std ${YEAR} 5################################################# 6 7YEAR=$(date "+%Y") 8MM=$1 9SECONDS=0 10LOGFILE="/tmp/js_`date +%Y%m%d_%H%M%S`.log" 11 12exec > "${LOGFILE}" 13exec 2>&1 14 15if [ "$#" -ne 1 ]; then 16 echo "Argument error!" 17 exit 1 18elif [[ ! "$MM" =~ [0-1][0-9] ]]; then 19 echo "Argument error!" 20 echo "Enter the month!" 21 exit 1 22fi 23 24test -f ${YEAR}-${MM}-${i}.json && echo "already exists ${YEAR}-${MM}-${i}.json" && exit 1 25 26for i in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 27do 28zcat "${YEAR}${MM}${i}"*.log.gz | awk -F \" '{print $8}' | 29grep -E "/xyz/std/[0-9]*/[0-9]*/[0-9]*.png$" | 30cut -d "?" -f 1 |cut -d "%" -f 1 |cut -d "#" -f 1 | 31sort |uniq -c |awk '$1 >= 50 {print $2","$1}' > ${YEAR}-${MM}-${i}.json 32 33sed -i -e "s/^/[\"/g" ${YEAR}-${MM}-${i}.json 34sed -i -e "s/.png/.png\"/g" ${YEAR}-${MM}-${i}.json 35sed -i -e "s/$/],/g" ${YEAR}-${MM}-${i}.json 36sed -i -e "1i {addressPoints:[" ${YEAR}-${MM}-${i}.json 37sed -i -e "$ s/],/]]}/g" ${YEAR}-${MM}-${i}.json 38done 39 40echo "[INFO] Script time is ${SECONDS}sec."
回答4件
あなたの回答
tips
プレビュー