如何简化计算任务耗时平均值的awk脚本,减少冗余代码?
优化冗余的AWK任务耗时统计脚本
原始日志示例
1699740442177 Start A 1699740442177 Start B 1699740442255 Start C 1699740442261 Finish B 1699740442337 Finish C 1699740442337 Finish A
原始脚本的冗余问题
你最初的脚本为每个任务单独定义变量(startA/sumA/numA等),每个任务都要重复写几乎一致的逻辑,当任务数量增加时,代码会变得臃肿且难以维护。
优化后的AWK脚本
利用AWK的关联数组特性,用任务名称作为数组键,统一处理所有任务的Start/Finish事件:
/Start/ { start_time[$3] = $1 # 以任务名为键,存储对应开始时间 } /Finish/ { task = $3 duration = $1 - start_time[task] sum_duration[task] += duration count[task]++ delete start_time[task] # 可选:清理已完成任务的缓存,节省内存 } END { # 遍历所有任务,输出各自的平均耗时 for (task in sum_duration) { print task, "平均耗时:", sum_duration[task]/count[task] } }
优化说明
- 用关联数组
start_time统一存储所有任务的开始时间,无需为每个任务单独定义变量 - 遇到
Finish事件时,通过任务名直接匹配对应的开始时间,计算耗时后累加到sum_duration数组,同时更新该任务的执行次数count - END块自动遍历所有已统计的任务,输出平均耗时,新增任务时无需修改脚本
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

