在awk中除以零值

Ais*_*rni 0 math awk division

我计算的平均分如下:

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

其中sum_of_scores按每个greped 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}')
Run Code Online (Sandbox Code Playgroud)

但是有时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
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个错误?

Tom*_*ech 5

您的sum_of_score变量应该像这样计算:

sum_of_score=$(awk '/271712:E1/ { sum += $5 } END { print sum + 0 }')
Run Code Online (Sandbox Code Playgroud)

+ 0该装置sum中在数值上下文评估,因此空sum0而不是一个空字符串.

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

awk '/271712:E1/ { sum += $5; ++count } END { if (count) print sum / count }'
Run Code Online (Sandbox Code Playgroud)

if (count)通过防止分割0如果count尚未递增.

你的"除以零"错误与除以零无关; 他们是语法错误.每个错误中的消息都描述了什么是错误的!