他の列の変数に基づいて列の値の合計を取得するには? [コピー]

他の列の変数に基づいて列の値の合計を取得するには? [コピー]

次の表データがあります

abc 1   1   1
bcd 2   2   4
bcd 12  23  3
cde 3   5   5
cde 3   4   5
cde 14  2   25

最初の列の変数に基づいて各列の値の合計を計算したいのですが、必要な結果は次のとおりです。

abc 1   1   1
bcd 14  25  7
cde 20  11  35

私はこのようにawkコマンドを使用します

awk -F"\t" '{for(n=2;n<=NF; ++n)a[$1]+=$n}END{for(i in a ) print i, a[i] }' tablefilepath

私が得た結果は次のとおりです。

abc 3
bcd 46
cde 66

私のコードの終わりが間違っているようですが、修正方法がわかりません。コードを修正するにはいくつかの指示が必要です。

ベストアンサー1

あなたはかなり近いです。何が間違っているのか知っていますか? 3つを維持する必要がありましたが、各列1の値に対して1つの合計を維持しました。

これは次のようになります。イニアンの答えただし、必要な数の列を処理するように簡単に拡張できます。

awk -F"\t" '{for(n=2;n<=NF; ++n) a[$1][n]+=$n}
        END {for(i in a) {
                printf "%s", i
                for (n=2; n<=4; ++n) printf "\t%s", a[i][n]
                printf "\n"
             }
        }'

Inianの答えのような3つの配列ではなく、1つの2D配列を保持します。

おすすめ記事