在 awk 中除以零值

Division by zero values in awk

我计算的平均分如下:

average_score=$(awk "BEGIN {printf \"%.2f\",${sum_of_score}/${number_of_lines}}")

其中每个 greped ID 的 sum_of_scores 计算如下:

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

number_of_lines=$(grep 271712:E1 M10.6.txt | awk 'END{print FNR}')

但是有时 sum_of_score 和/或 number_of_lines 的值可能为零,因此我收到错误消息:

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 变量应该这样计算:

sum_of_score=$(awk '/271712:E1/ { sum +=  } END { print sum + 0 }')

+ 0 表示 sum 是在数字上下文中计算的,因此空 sum0 而不是空字符串。

如果你只想要平均值(均值),那么这样做:

awk '/271712:E1/ { sum += ; ++count } END { if (count) print sum / count }'

如果 count 没有递增,if (count) 会阻止除以 0

您的 "division by zero" 错误实际上与除以零无关;它们是语法错误。每个错误中的消息描述了错误所在!