我有一个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