переименование заголовков fasta с помощью выражений awk - reg - PullRequest
1 голос
/ 10 июля 2020

У меня есть согласованные последовательности трехсегментного вирусного генома (три сегмента названы L, M или S соответственно), поэтому внутри каждого файла fasta генома у меня есть три файла fasta, которые выглядят следующим образом:

>Toscana_virus_L_(consensus)_(consensus)
TTAACCATTCATCCCCTGAGGAGGTATGAATCATCAATTTATGACACTCCAATACCAGCC
..

>Toscana_virus_M_(consensus)_(consensus)
AATATACTATTATTTCAGAGATAGGGAACGGCACTAGAACTTCCTTTTTAGAAGCTTGGG
..

>Toscana_virus_S_(consensus)_(consensus)
NNACAAAGACCTCCCGTATTGCTAAACCAGAACTAATAATAGACTTCTAGACAGCCATGC
..

Я хочу изменить заголовок файла fasta на правильное имя образца.

Имена образцов моих файлов выглядят так:

LCR_1152; 
LCR367 , etc

Вот что я сделал:

cp *.fasta to_rename/  
mkdir renamed 
cd to_rename
for filename in *.fasta; do filename2=$(echo $filename | sed 's/.*\(LCR_?\).*\([0-9][0-9][0-9][0-9]?$\).*/\1\2/'); awk -v a="$filename2" '/^>/{print ">"a; next}{print}' < $filename > ../renamed/$filename ; done

И это сработало хорошо, но проблема в том, что теперь внутри каждого файла три сегмента имеют одинаковый заголовок, я потерял различие L, M или S.

Например, вот что Я получаю:

>LCR_1152
TTAACCATTCATCCCCTGAGGAGGTATGAATCATCAATTTATGACACTCCAATACCAGCC
..

>LCR_1152
AATATACTATTATTTCAGAGATAGGGAACGGCACTAGAACTTCCTTTTTAGAAGCTTGGG
..

>LCR_1152
NNACAAAGACCTCCCGTATTGCTAAACCAGAACTAATAATAGACTTCTAGACAGCCATGC
..

Но я хочу следующее ..

>LCR_1152_L
TTAACCATTCATCCCCTGAGGAGGTATGAATCATCAATTTATGACACTCCAATACCAGCC
..

>LCR_1152_M
AATATACTATTATTTCAGAGATAGGGAACGGCACTAGAACTTCCTTTTTAGAAGCTTGGG
..

>LCR_1152_S
NNACAAAGACCTCCCGTATTGCTAAACCAGAACTAATAATAGACTTCTAGACAGCCATGC
..

Чтобы не потерять идентичность фрагментов.

Не знаю как решить, мои попытки не увенчались успехом: (

Кто-нибудь знает, как это решить?

1 Ответ

2 голосов
/ 10 июля 2020

Если я понимаю, это то, что вы хотите сделать:

for file in fic1 fic2 ...
do
    awk -v f="$file" ' 
    />/{
        if($0 ~ /_L_/){suffix="_L"}
        if($0 ~ /_M_/){suffix="_M"}
        if($0 ~ /_S_/){suffix="_S"}
        
        sf=$0
        gsub(/>.*/, f, $0)
        print ">"$0""suffix
        $0=sf
    } 
    !/>/{
       print 
    }' "$file" > /renamedpath/"$file"
done

результат:

>LCR_1152_L
TTAACCATTCATCCCCTGAGGAGGTATGAATCATCAATTTATGACACTCCAATACCAGCC
..

>LCR_1152_M
AATATACTATTATTTCAGAGATAGGGAACGGCACTAGAACTTCCTTTTTAGAAGCTTGGG
..

>LCR_1152_S
NNACAAAGACCTCCCGTATTGCTAAACCAGAACTAATAATAGACTTCTAGACAGCCATGC
...