Math 用awk中的零值除

Math 用awk中的零值除,math,awk,division,Math,Awk,Division,我计算的平均分数如下: average_score=$(awk "BEGIN {printf \"%.2f\",${sum_of_score}/${number_of_lines}}") 其中,每个灰色ID的分数总和计算如下: sum_of_score=$(grep 271712:E1 M10.6.txt | awk '{s+=$5} END {print s}') number_of_lines=$(grep 271712:E1 M10.6.txt | awk 'END{print FNR

我计算的平均分数如下:

average_score=$(awk "BEGIN {printf \"%.2f\",${sum_of_score}/${number_of_lines}}")
其中,每个灰色ID的分数总和计算如下:

sum_of_score=$(grep 271712:E1 M10.6.txt | awk '{s+=$5} END {print s}')

number_of_lines=$(grep 271712:E1 M10.6.txt | awk 'END{print FNR}')
但是,有时,分数总和和/或行数可能为零,因此我得到一个错误:

awk: BEGIN {printf "%.2f",/0}
awk:                       ^ unterminated regexp
awk: cmd. line:1: BEGIN {printf "%.2f",/0}
awk: cmd. line:1:                         ^ unexpected newline or end of string

如何处理此错误?

您的
总分
变量的计算应如下所示:

sum_of_score=$(awk '/271712:E1/ { sum += $5 } END { print sum + 0 }')
+0
表示在数值上下文中计算
sum
,因此空的
sum
0
,而不是空字符串

如果您只想要平均值(平均值),请执行以下操作:

awk '/271712:E1/ { sum += $5; ++count } END { if (count) print sum / count }'
如果未增加计数,则
if(count)
可防止除以
0
if
count


你的“零除”错误实际上与零除无关;它们是语法错误。每个错误中的消息描述了错误所在

您的
总分
变量的计算应如下所示:

sum_of_score=$(awk '/271712:E1/ { sum += $5 } END { print sum + 0 }')
+0
表示在数值上下文中计算
sum
,因此空的
sum
0
,而不是空字符串

如果您只想要平均值(平均值),请执行以下操作:

awk '/271712:E1/ { sum += $5; ++count } END { if (count) print sum / count }'
如果未增加计数,则
if(count)
可防止除以
0
if
count


你的“零除”错误实际上与零除无关;它们是语法错误。每个错误中的消息描述了错误所在

你的炮弹和awk弹太离谱了。您完全没有理解使用awk的意义,并且不恰当地使用了shell。至少读一读阿诺德·罗宾斯的《有效的Awk编程》第四版的前几章,你就再也不会写这样的代码了。请参阅@TomFenech的计算平均值的脚本,以了解解决此问题的正确方法。谢谢Ed,我会确保我做到这一点。你的shell和awk太多了。您完全没有理解使用awk的意义,并且不恰当地使用了shell。至少读一读阿诺德·罗宾斯的《有效的Awk编程》第四版的前几章,你就再也不会写这样的代码了。请参阅@TomFenech计算平均值的脚本,以了解解决此问题的正确方法。感谢Ed,我将确保我做到这一点。非常感谢,这非常有用。非常感谢,这非常有用。