使用shell脚本

时间:2016-05-27 01:23:12

标签: linux shell awk

我有一个10年(1995-2004)的时间序列每日数据集,其中一些缺失值为9999.00。我想计算每年的年平均值而不考虑缺失值。

我可以通过以下命令考虑365天日历来实现它

awk '!/\9999.00/{sum += $1; count++} NR%365==0{print count ? (sum) :9999.00;sum=count=0}'ifile

但是我无法使用闰年日历进行修改。我还需要添加另一列多年。我的愿望输出是

1995 annual_average
1996 annual_average
1997 annual_average
....

例如: 我有以下1995 - 2000年的数据。如果是闰年,我需要计算每3行而不是365行和4行的平均值而不是366行:

3
3
4
9999.00
4
9999.00
13
3
9999.00
9999.00
9999.00
9999.00
9999.00
3
4
2
2
2.6
5.1
4.5

试用命令:

awk '!/\9999.00/{sum += $1; count++} NR%3==0{print count ? (sum) :9999.00;sum=count=0}'ifile

欲望输出:

1995  3.33
1996  8.5   it is a leap year, so average of 4 lines without considering missing values (4+13)/2
1997  3
1998  9999.00
1999  3
2000  3.55   leap year

1 个答案:

答案 0 :(得分:1)

此代码适用于您的示例数据。当然,您需要调整target值:

BEGIN {
    year = 0;
    target = 3;
}
$1 < 9990.00 {
    sum += $1;
    count++;
}
NR == target {
    if (count == 0) {
        print "9999";
    } else {
        print sum / count;
    }
    sum = 0;
    count = 0;
    year++;
    if (year % 4 == 1) {
        target += 4;
    } else {
        target += 3;
    }
}

哦,请记住,非常简单的闰年计算会在几年内失败,尽管不是你提到的年份。