我有一个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
答案 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;
}
}
哦,请记住,非常简单的闰年计算会在几年内失败,尽管不是你提到的年份。