计算平均值而不考虑shell脚本中的缺失值?

时间:2015-08-31 08:48:25

标签: linux shell awk

我有一个包含许多缺失值的数据集为-999。部分数据是

input.txt
30
-999
10
40
23
44
-999
-999
31
-999
54
-999 
-999
-999
-999
-999
-999
-999 and so on

我想在不考虑缺失值的情况下计算每6行间隔的平均值。

欲望输出

ofile.txt
29.4
42.5
-999

我正在尝试这个

awk '!/\-999/{sum += $1; count++} NR%6==0{print count ? (sum/count) : count;sum=count=0}' input.txt

它正在给予

29.4
42.5
0

1 个答案:

答案 0 :(得分:3)

我不完全确定为什么,如果您对-999值进行折扣,您认为-999对于平均值而言是{0}更好的选择。第三组。在前两组中,-999值既不会导致总数也不会导致计数,因此可以认为零是更好的选择。

但是,您可能希望-999代表"缺乏价值" (肯定会出现组中没有值的情况)。如果是这种情况,您只需在原始代码中输出-999而不是count

awk '!/\-999/{sm+=$1;ct++} NR%6==0{print ct?(sm/ct):-999;sm=ct=0}' input.txt

即使您确定零 是一个更好的答案,我仍然会明确表示而不是自己输出计数变量:

awk '!/\-999/{sm+=$1;ct++} NR%6==0{print ct?(sm/ct):0;sm=ct=0}' input.txt
相关问题