awk固有の列平均化ヘルプ

awk固有の列平均化ヘルプ

論文のためにいくつかのデータを処理する必要がありますが、ポイントが200万を超えるため、Linuxを介して処理する必要があります。私は現在、次のファイルに選択したデータを保存するために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

列は10進年、経度、緯度、値です。同じ緯度と経度で同じ年の各ポイント値の平均を計算したいと思います(したがって、現在の年の小数点数は無視します)。

たとえば、出力は次のようになります。

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]
}

おすすめ記事