何百万ものレコードを含むログ ファイルから 1 時間ごとの平均応答時間を計算しようとしています。以下にログからの抜粋を示します。
現在、一意の ID と開始時刻と終了時刻を持つ行を持つ一時ファイルを作成しようとしています。その後、この一時ファイルで別のスクリプトが実行され、1 時間ごとの平均応答時間が計算されます。一時ファイルを作成します。
もっと早くできる方法はありますか?または実行時間が短いより良いスクリプト。注: これらの UNIQID は順番に来るわけではありません。
log file format
2012-06-04 13:04:19,324 UNIQID1
2012-06-04 13:04:20,120 UNIQID1
2012-06-04 13:05:19,324 UNIQID2
2012-06-04 13:06:20,120 UNIQID2
2012-06-04 13:07:19,324 UNIQID3
2012-06-04 13:08:20,120 UNIQID3
2012-06-04 13:08:49,324 UNIQID4
2012-06-04 13:09:50,120 UNIQID4
これが私のコードです:
uids=`cat $i|grep "UNIQ" |sort -u` >> $log
for uid in ${uids}; do
count=`grep "$uid" test.log|wc -l`
if [ "${count}" -ne "0" ]; then
unique_uids[counter]="$uid"
let counter=counter+1
fi
done
echo ${unique_uids[@]}
echo $counter
echo " Unique No:" ${#unique_uids[@]}
echo uid StartTime EndTime" > $log
for unique_uids in ${unique_uids[@]} ; do
responseTime=`cat $i|grep "${unique_uids}" |awk '{split($2,Arr,":|,"); print Arr[1]*3600000+Arr[2]*60000+Arr[3]*1000+Arr[4]}'|sort -n`
echo $unique_uids $responseTime >> $log
done
御時間ありがとうございます!