Multifasta标题修剪

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

我有一个multifasta文件,我需要删除每个fasta文件的标题的一些部分。例如:

>Viridibacillus_arenosi_FSL_R5_0213-BK137_RS04360-22-CBS_domain-containing_protein <unknown description>
GCTAATGAAGTTATTGGCCTAGTGACAGAAAGGGATATAAAAAACGCGCTTCCTTCTTCC
CTGCTC------AAA
>Viridibacillus_arvi_DSM16317-AMD00_RS08865-16-acetoin_utilization_protein_AcuB <unknown description>
GCGAATGAAGTTATTGGCCTAGTAACAGAAAGGGATATAAAAAACGCCCTTCCATCTTCC
CTGCTC------AAA

我需要删除标题中“ - ”后面的部分,即“-BK137_RS04360-22-CBS_domain-containing_protein”和“-AMD00_RS08865-16-acetoin_utilization_protein_AcuB”。

我试过了

 cut -d '-' -f 1 your_file.fasta > new_file.fasta

 awk '{split($0,a,"-"); if(a[1]) print ">"a[1]; else print; }' my_file.fasta > new_file.fasta

但这是一个对齐文件,它也删除了我的序列中的“ - ”,这当然是我不想要的。

bash awk sequence fasta
2个回答
0
投票

cut以相同的方式处理所有行,但是您只需要处理行的子集,即以>开头的行。你可以试试awk

awk -F- '{if ($0 ~ /^>/) {print $1} else {print $0}}' in.fasta > out.fasta

这使用-作为分隔符,并在每一行中检查它是否以>开头。如果为true,则只打印第一个字段;如果错误,打印一切。

命令甚至可以缩短一点。


0
投票

这可以通过以下方式轻松完成:

awk -F"-" '/^>/{print $1; next}1' in.fasta > out.fasta
© www.soinside.com 2019 - 2024. All rights reserved.