2016-01-22 84 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