1. 程式人生 > >shell指令碼統計出日誌檔案操作以及其對應的平均時間

shell指令碼統計出日誌檔案操作以及其對應的平均時間

有如下日誌:exmple.log


time: 1.236
operation:查詢
time: 2.135
operation:處理
time: 3.741
operation:處理
time: 1.236
operation:查詢


現在要求,統計出查詢和處理以及其對應的平均時間


這個問題的關鍵點也是難點在於每兩行是不可分割的部分。查了一下資料發現 xargs -l2能夠使每兩行合併為1行進行處理。故本問題的解法為:
cat example.log|xargs -l2|awk -F '\s' '{count[$3]++;time[$3]+=$2;}END{for(ind in count){print ind"\t"count[ind]"\t"time[ind]/count[ind]}}'
至此問題解決。


發現上面這個方法執行時間有些緩慢,在高人指點下學習了一下awk,後來改造該指令碼為:

cat example.log|awk 'BEGIN{IGNORECASE=1}{if($0~/time:/){printf("%f\t",$2)}else if($0~/operation:/){printf("%s\n",$0)}}'|awk -F '/t' '{count[$3]++;time[$3]+=$2;}END{for(ind in count){print ind"\t"count[ind]"\t"time[ind]/count[ind]}}'

執行時間大大縮短。之所以使用cat,為了方便擴充套件,比如說只統計新增的日誌,可以將cat example.log換成dd命令。


由於剛接觸linux指令碼,故寫法肯定有很多不妥的地方,希望大家多多評論指導。