我有一个看起来像这样的文件,
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 的第四列值的总和。
答案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