使用AWK查找不包含某些行的列的平均值

时间:2015-06-15 16:23:56

标签: linux bash awk scripting

我想计算第5列(最后一列)的平均值,不包括值为“9999”的行。非常感谢您的反馈。

77.300 16 1 3.6112914285714268 9.4 
77.300 16 2 -0.001737142857145102 20.0 
77.300 16 3 5.1570742857142857 8.9 
77.300 17 0 3.6112914285714268 8.9  
77.300 17 1 2.9484342857142849 11.7  
77.300 17 2 -0.001737142857145102 22.6   
77.300 17 3 3.5098971428571417 9.2 
77.300 18 0 3.5098971428571417 9.4  
77.300 18 1 2.9484342857142849 14.0  
77.300 18 2 -0.001737142857145102 24.7   
77.300 18 3 3.5098971428571417 9.4  
77.650 13 0 3.2896914285714267 9.4  
77.650 13 1 0.0042514285714272404 24.9 
77.650 13 2 2.0769371428571421 9.1  
77.650 13 3 0.0042514285714272404 99999  
77.650 14 0 1.8255085714285713 9.3  
77.650 14 1 0.0042514285714272404 99999 
77.650 14 2 1.8255085714285713 9.2  
77.650 14 3 0.0042514285714272404 99999  
77.650 15 0 3.2896914285714267 8.7  
77.650 15 1 4.2542171428571418 8.7   

1 个答案:

答案 0 :(得分:2)

通过awk,

$ awk '$5!="99999"{sum+=$5}END{print sum}' file
227.5

说明:

  • $5!="99999"如果第5列不包含99999,则执行

  • {sum+=$5}将第5列的值添加到变量sum。同样,当awk看到满足给定条件的记录时,它会不断添加第5列的值。

  • 最后在结尾打印变量sum

平均值。

$ awk '$5!="99999"{sum+=$5;cnt++}END{print (cnt?sum/cnt:"NaN")}' file
12.6389