2つの列に基づいて重複する項目を見つけて、別の列を合計します。

2つの列に基づいて重複する項目を見つけて、別の列を合計します。

このようなファイルがありますが、

 REF     QUERY   COVR    COVQ
sca_10_chr8_2_0 scaffold_2     0.08    2.48
sca_10_chr8_2_0 scaffold_1     0.02    0.02
sca_10_chr8_2_0 scaffold_2      0.22    0.06
sca_10_chr8_2_0 scaffold_2      0.21    0.05
sca_10_chr8_2_0 scaffold_1     0.21    0.27
sca_10_chr8_2_0 scaffold_2     0.21    0.64
sca_10_chr8_2_0 scaffold_4      0.20    0.06
sca_10_chr8_2_0 scaffold_8      0.20    0.07
sca_10_chr8_2_0 scaffold_10     0.21    0.08

列1と2のそれぞれの異なる組み合わせに対して、または列1と2の重複に基づいて列4(合計適用範囲)を合計して、次の出力ファイルを取得したいと思います。

REF QUERY COVQ
sca_10_chr8_2_0  scaffold_2  1.52
sca_10_chr8_2_0  scaffold_1  0.29
sca_10_chr8_2_0  scaffold_4  0.06
sca_10_chr8_2_0  scaffold_8  0.07
sca_10_chr8_2_0  scaffold_10  0.08

ベストアンサー1

$ cat tst.awk
NR==1 { print $1, $2, $4; next }
{ sum[$1 OFS $2] += $4 }
END {
    for (key in sum) {
        print key, sum[key]
    }
}

$ awk -f tst.awk file
REF QUERY COVQ
sca_10_chr8_2_0 scaffold_8 0.07
sca_10_chr8_2_0 scaffold_10 0.08
sca_10_chr8_2_0 scaffold_1 0.29
sca_10_chr8_2_0 scaffold_2 3.23
sca_10_chr8_2_0 scaffold_4 0.06

上記は、$ 1と$ 2の各ペアの4番目の列値の合計であるため、あなたの質問で予想される出力が間違っているとします。

おすすめ記事