Как суммировать в один столбец другой столбец из другого файла?

Дан файл Fasta со строками последовательности одинаковой длины ,

$ cat file.fa
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAA
RGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFE
VLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLLG
QKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVE
LVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............
>sp|P0AD68|HUMAN
MKAAAKTQKPKRQEEHANFISWRFALLCGC
ILLALAFLLGRVAWLQVISPDMLVKEGDMR
SLRVQQVSTSRGMITDRSGRPLAVSVPVKA
IWADPKEVHDAGGISVGDRWKALANALNIP
.............

и файл запроса с именами последовательностей,

$ cat query
sp|B7UM99|TIR_ECO27
sp|P06616|ERA_ECOLI

, тогдаsamtoolsможно использовать как

$ samtools faidx file.fa -r query
>sp|B7UM99|TIR_ECO27
MPIGNLGNNVNGNHLIPPAPPLPSQTDGAARGGTGHLISSTGALGSRSLFSPLRNSMADS
VDSRDIPGLPTNPSRLAAATSETCLLGGFEVLHDKGPLDILNTQIGPSAFRVEVQADGTH
......
>sp|P06616|ERA_ECOLI
MSIDKSYCGFIAIVGRPNVGKSTLLNKLLGQKISITSRKAQTTRHRIVGIHTEGAYQAIY
VDTPGLHMEEKRAINRLMNKAASSSIGDVELVIFVVEGTRWTPDDEMVLNKLREGKAPVI
............

0
03.04.2021, 12:45
1 ответ
$ cat tst.awk
BEGIN { FS=OFS="," }
NR==FNR {
    if ( FNR == 1 ) {
        mult = ($1=="IN" ? 1 : -1)
    }
    else {
        add[$1] = mult * $2
    }
    next
}
{
    $2 += add[$1]
    print
}

$ awk -f tst.awk file2 file1
element1,20
element2,10
element3,10

$ awk -f tst.awk file3 file1
element1,4
element2,10
element3,0

$ head file{1..3}
==> file1 <==
element1,12
element2,10
element3,5

==> file2 <==
IN
element1,8
element3,5

==> file3 <==
OUT
element1,8
element3,5
2
28.04.2021, 22:54

Теги

Похожие вопросы