Linux
根據兩列查找重複項,然後對另一列求和
我有一個看起來像這樣的文件,
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
$ 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
我假設您問題中的預期輸出是錯誤的,因為上面是每個第 4 列值的總和 $ 1 and $ 2對。
使用米勒:
$ mlr --pprint --ofmt '%.2f' stats1 -a sum -g REF,QUERY -f COVQ yourfile REF QUERY COVQ_sum sca_10_chr8_2_0 scaffold_2 3.23 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