如果满足shell脚本中的给定条件,则计算平均值

时间:2016-05-27 02:52:36

标签: linux shell awk

我有一个包含许多缺失值的数据集,例如9990,9999,9999000,999999等等。但所有都超过9990.我想取每24个值的平均值。我正在尝试使用以下命令,但没有得到我的愿望输出。

awk '{if ($1 < 9990) sum += $1; count++} NR%24==0{print count ? (sum) :9999;sum=count=0}'ifile

例如:我需要在以下数据中平均每3行

3
3
4
9999
4
99990
13
3
999999
9999
9991
99954

我尝试了这个,但显示了不同的结果:

awk '{if ($1 < 9990)sum += $1; count++} NR%3==0{print count ? (sum/count) :9999;sum=count=0}'ifile

我的愿望输出是

3.33
4     Average of 9999 4 99990 is done with 4/1. Because 9999 and 99990 are undefined values.
8    Average of 13 3 999999 is done with (13+8)/2. Because 999999 is an undefined value, so excluded from the average.
9999  All are undefined values, so denoted as 9999.

1 个答案:

答案 0 :(得分:2)

$1 < 9990 {
    sum += $1;
    count++;
}
NR % 3 == 0 {
    if (count == 0) {
        print "9999";
    } else {
        print sum / count;
    }
    sum = 0;
    count = 0;
}

当值为“未定义”时,您的错误是增加count。如果你写

 {if ($1 < 9990) sum += $1; count++} 

然后if语句在下一个分号结束,而不是在结束括号。