在Fasta文件中的标题中添加序列长度

问题描述 投票:2回答:1

我有一个multifasta文件,想通过保留序列将序列长度添加到标题中。

>Seq1
MADKLTRIAIVNHDKCKPKKCRQECKKSCPVVRMGKLCIEVTPQSKIAWISETLCIGCGI
KILAGKQKPNLGKYDDPPDWQEILTYFRGSELQNYFTKILEDDLKAIIKPQYVDQIPKAA
KGTVGSILDRKDETKTQAIVCQQLDLTHLKERNVEDLSGGELQRFACAVVCIQK

>Seq2
MADKLTRIAIVNHDKCKPKKCRQECKKSCPVVRMGKLCIEVTSQSKIAWISETLCIGCGI
CIKKCPFGALSIVNLPSNLEKETTHRYCANAFKLHRLPIPRPGEVLGLVGTNGIGKSTAL
KGTVGSILDRKDETKTQTVVCQQLDLTHLKERNVEDLSGGELQRFACAVVCIQKADIFMF
DEPSSYLDVKQRLKAAITIRSLINPDRYIIV

我想要的输出

>Seq1_174
MADKLTRIAIVNHDKCKPKKCRQECKKSCPVVRMGKLCIEVTPQSKIAWISETLCIGCGI
KILAGKQKPNLGKYDDPPDWQEILTYFRGSELQNYFTKILEDDLKAIIKPQYVDQIPKAA
KGTVGSILDRKDETKTQAIVCQQLDLTHLKERNVEDLSGGELQRFACAVVCIQK

>Seq2_211
MADKLTRIAIVNHDKCKPKKCRQECKKSCPVVRMGKLCIEVTSQSKIAWISETLCIGCGI
CIKKCPFGALSIVNLPSNLEKETTHRYCANAFKLHRLPIPRPGEVLGLVGTNGIGKSTAL
KGTVGSILDRKDETKTQTVVCQQLDLTHLKERNVEDLSGGELQRFACAVVCIQKADIFMF
DEPSSYLDVKQRLKAAITIRSLINPDRYIIV

我尝试使用此命令

awk '/^>/{if (l!="") print l; print; l=0; next}{l+=length($0)}END{print l}' file.fasta | paste - - | sed 's/\t/_/' | >seq_len.fasta 

但是它仅显示长度而不显示序列。您可以不使用biopython或seqkit来帮助我解决此问题吗?例如:

bash fasta
1个回答
2
投票

[如果行不是以>开头,则将序列数据累加到一个变量中,并将其长度加到总变量中。当该行以>开头时,打印您要累积的序列,并将当前行保存为下一个序列的名称。最后,在文件末尾打印最后一个序列。

awk '/^>/ { if (name) {printf("%s_%d\n%s", name, len, seq)} name=$0; seq=""; len = 0; next}
    NF > 0 {seq = seq $0 "\n"; len += length()}
    END { if (name) {printf("%s_%d\n%s", name, len, seq)} }' file.fasta > seq_len.fasta
© www.soinside.com 2019 - 2024. All rights reserved.