我有一個awk腳本,用於計算某些事務完成所需的時間。腳本獲取每個事務的唯一ID並存儲每個事務的最小和最大時間戳。然後計算差異,最後顯示超過60秒的結果。處理大文件時的AWK性能
使用數千個(200k)時效果很好,但在現實世界中使用需要更多時間。我測試了幾次,大約需要15分鐘處理大約2800萬行。我可以考慮這個好的表現,還是可以改進它?
我願意接受任何建議。
這裏有完整的代碼
zgrep -E "\(([a-z0-9]){15,}:" /path/to/very/big/log | awk '{
gsub("[()]|:.*","",$4); #just removing ugly chars
++cont
min=$4"min" #name for maximun value of current transaction
max=$4"max" #same as previous, just for readability
split($2,secs,/[:,]/) #split hours,minutes and seconds
seconds = 3600*secs[1] + 60*secs[2] + secs[3] #turn everything into seconds
if(arr[min] > seconds || arr[min] == 0)
arr[min]=seconds
if(arr[max] < seconds)
arr[max]=seconds
dif=arr[max] - arr[min]
if(dif > 60)
result[$4] = dif
}
END{
for(x in result)
print x" - "result[x]
print ":Processed "cont" lines"
}'
關於編輯:零件打印「新的MO找到!」名稱「開始於」秒(我將賦值給min [name]的塊)僅執行〜= 800次,但是在最後,它報告最小長度約爲80k,這是非價值指數的數量。 – Danielo515 2014-10-03 12:17:07