두 열을 기준으로 중복 항목을 찾은 다음 다른 열을 합산합니다.

두 열을 기준으로 중복 항목을 찾은 다음 다른 열을 합산합니다.

이런 파일이 있는데,

 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

관련 정보