在 fasta 文件中将序列长度添加到 headers

Add sequence lengths to headers in a fasta file

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

>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([=13=])}END{print l}' file.fasta | paste - - | sed 's/\t/_/' | >seq_len.fasta 

但是只显示长度,没有顺序。 你能帮我在不使用 biopython 或 seqkit 的情况下解决这个问题吗? 例如:

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

awk '/^>/ { if (name) {printf("%s_%d\n%s", name, len, seq)} name=[=10=]; seq=""; len = 0; next}
    NF > 0 {seq = seq [=10=] "\n"; len += length()}
    END { if (name) {printf("%s_%d\n%s", name, len, seq)} }' file.fasta > seq_len.fasta