awk 帮助平均特定列

awk 帮助平均特定列

我需要为我的论文处理一些数据,并且我需要通过 Linux 来完成它,因为我有超过 200 万个点。我目前已使用 awk 将选定的数据保存在一个看起来像这样的文件中:

2003.1 -142 42.0000 -6.8990
2003.2 -142 42.0000 -4.7063
...
2003.12 -142 42.0000 -2.1986
2004.1 -139 42.0000 0.6408
2004.2 -139 42.0000 3.7293
2004.3 -137 50.0000 6.9090
2004.4 -136 50.0000 10.0193

列分别为:十进制年份、经度、纬度、值。我想对同一年中具有相同纬度和经度的每个点值进行平均(因此忽略当年的小数位)。

例如,输出将如下所示:

2003   1   1   30.000
2003   1   2   20.000
...
2003   180 90  40.000
2004   1   1   30.000
2004   1   2   20.000
...
2004   180 90  40.000
...
...
...
2015   180 90 -100.000

每年每个点的平均值。

我目前一直在使用 awk,所以如果有人能告诉我如何使用它,我将不胜感激,谢谢!

答案1

就像是

#!/usr/bin/gawk
BEGIN {OFS = "\t"}
{
    key = int($1) OFS $2 OFS $3
    sum[key] += $4
    count[key]++
}
END {
    PROCINFO["sorted_in"] = "@ind_str_asc"
    for (key in sum)
        print key, sum[key]/count[key]
}

相关内容