所以我有以下代码行:
None
if (sum[msg,h]/summsg[msg,h] != 0)
printf ("%9.2f\n",sum[msg,h]/summsg[msg,h])
是一个消息数组,包含10个不同的值
msg
保留日志文件中存在的所有小时数。
hr
数组是一个字段的值(sum[]
)
并且sum[$5,$3] += $11
数组正在计算行数(summsg[]
)
这会重新调整summsg[$5,$3]++
错误,但我希望fatal: division by zero attempted
评估awk
,然后继续。
我还尝试使用以下代码检查每个值:
sum[msg,h]/summsg[msg,h] != 0
但这是停止我的小时计算,因为我认为它在00-09小时内领先0并返回假。
如果需要,我可以提供完整的代码。
有什么想法吗?
根据评论,它们是拼写错误,纠正了它们并且它们没有任何区别。
if (sum[msg,h] != 0 || summsg[msg,h] != 0)
printf ("%9.2f\n",sum[msg,h]/summsg[msg,h])
这是一个弥补的输入文件
反映输入文件的代码如下:
message1 01 10
message2 01 01
message2 01 05
message1 01 15
message1 01 05
message1 02 03
message1 02 06
message2 02 10
message2 02 20
message2 02 05
答案 0 :(得分:3)
对于您的MCVE代码,问题是您在加载数组时使用01
或02
为数组编制索引,但尝试使用1
或{{1}提取数据}(没有前导零)。你必须解决这个问题。例如:
2
对于样本输入,输出变为:
{
msg_type[$1]++
sum[$1,$2] += $3
summsg[$1,$2]++
#print "type:", $1, "hr:", $2, "value:", $3
}
END {
for (msg in msg_type) {
print msg
for (i = 0; i <= 23; i++) {
if (i < 10)
h = "0" i
else
h = i
#print " ", msg, h, sum[msg,h], summsg[msg,h]
if (sum[msg,h] != 0 || summsg[msg,h] != 0)
printf("%9.2f\n", sum[msg,h]/summsg[msg,h])
}
}
}
我认为您应该打印小时,但这是您的选择。