在 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
是在数字上下文中计算的,因此空 sum
是 0
而不是空字符串。
如果你只想要平均值(均值),那么这样做:
awk '/271712:E1/ { sum += ; ++count } END { if (count) print sum / count }'
如果 count
没有递增,if (count)
会阻止除以 0
。
您的 "division by zero" 错误实际上与除以零无关;它们是语法错误。每个错误中的消息描述了错误所在!
我计算的平均分如下:
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
是在数字上下文中计算的,因此空 sum
是 0
而不是空字符串。
如果你只想要平均值(均值),那么这样做:
awk '/271712:E1/ { sum += ; ++count } END { if (count) print sum / count }'
如果 count
没有递增,if (count)
会阻止除以 0
。
您的 "division by zero" 错误实际上与除以零无关;它们是语法错误。每个错误中的消息描述了错误所在!