2016-01-22 44 views
0

零个值我计算平均得分如下:司通过在AWK

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

其中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}') 

然而,在倍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 

我该如何处理这个错误?

+2

你是基于shell和awk的基础。你完全错过了使用awk的观点,并且你不适当地使用shell。至少阅读由Arnold Robbins撰写的第4版Effective Awk Programming一书的前几章,您将永远不会再编写这样的代码。请参阅@ TomFenech的脚本来计算平均值,以查看解决此问题的正确方法。 –

+1

谢谢埃德我会确保我这样做。 – AishwaryaKulkarni

回答

5

sum_of_score变量应该被计算如下:

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

+ 0意味着sum在数值上下文中计算,所以空sum0而不是一个空字符串。

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

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

if (count)防止除以0如果count尚未递增。

你的“零除”误差实际上与除零除无关;他们是语法错误。每个错误中的消息描述了什么是错的!

+1

非常感谢,这非常有帮助。 – AishwaryaKulkarni