Multifasta标头修剪

时间:2019-02-13 06:55:34

标签: bash awk sequence fasta

我有一个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- contains_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

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

2 个答案:

答案 0 :(得分:0)

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

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

这使用-作为分隔符,并在每一行中检查它是否以>开头。如果为true,则仅打印第一个字段。如果为假,则打印所有内容。

命令甚至可以缩短一点。

答案 1 :(得分:0)

这很容易通过以下方式完成:

awk -F"-" '/^>/{print $1; next}1' in.fasta > out.fasta