我有一个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
但这是一个对齐文件,它也删除了我序列中的“-”,这当然是我不想要的。
答案 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