如何缩短Fasta文件中的标头?

时间:2018-09-18 10:49:16

标签: linux

我有一个看起来像这样的文件:

>Gene.10::S0008.1::g.10::m.10 Gene.10::S0008.1::g.10  ORF type:complete len:250 (-),score=22.42 S_0008.1:286-1035(-)
MKGDDFNIITAPVPINRIWWYSLTNRQRIALVFYMSFYVAGTLTNTASMFIDKFYIYIMR
LESLQMGSADPIDYKYLLEVQIVRGFWREDVHEVVDKVFRGKSIGYIKTNLMIPVEIWNN
CQVRSFRGIPCHSVAIICLIFGMLILYYHCTTVALFRTFMILNANLAAILLFIAMSMEYS
AAVEYDYCVNSVFMNRKTGGKAFVRGRYYNRTLEASGSTFKLMMVGDILFFCPMIGLGCY
LLFCNRENL* 
>Gene.11::S0009.1::g.10::m.11 Gene.11::S0009.1::g.10  ORF type:complete len:250 (-),score=22.42 S_0008.1:286-1035(-)
QSAISNDEELNKIMDA
....

我要删除第一个空格后的标题中的所有内容。如何在Linux中轻松做到这一点?

结果文件:

>Gene.10::S0008.1::g.10::m.10 
MKGDDFNIITAPVPINRIWWYSLTNRQRIALVFYMSFYVAGTLTNTASMFIDKFYIYIMR
LESLQMGSADPIDYKYLLEVQIVRGFWREDVHEVVDKVFRGKSIGYIKTNLMIPVEIWNN
CQVRSFRGIPCHSVAIICLIFGMLILYYHCTTVALFRTFMILNANLAAILLFIAMSMEYS
AAVEYDYCVNSVFMNRKTGGKAFVRGRYYNRTLEASGSTFKLMMVGDILFFCPMIGLGCY
LLFCNRENL* 
>Gene.11::S0009.1::g.10::m.11 
QSAISNDEELNKIMDA

3 个答案:

答案 0 :(得分:0)

我会使用sed:

sed '/^>/s/^>\([^ ]*\) .*/>\1 /'

如果一行以>开头,则删除第一个空格之后的所有内容。以下:

echo '>Gene.10::S0008.1::g.10::m.10 Gene.10::S0008.1::g.10  ORF type:complete len:250 (-),score=22.42 Sxl_rink_0008.1:286-1035(-)
MKGDDFNIITAPVPINRIWWYSLTNRQRIALVFYMSFYVAGTLTNTASMFIDKFYIYIMR
LESLQMGSADPIDYKYLLEVQIVRGFWREDVHEVVDKVFRGKSIGYIKTNLMIPVEIWNN
CQVRSFRGIPCHSVAIICLIFGMLILYYHCTTVALFRTFMILNANLAAILLFIAMSMEYS
AAVEYDYCVNSVFMNRKTGGKAFVRGRYYNRTLEASGSTFKLMMVGDILFFCPMIGLGCY
LLFCNRENL* 
>Gene.11::S0009.1::g.10::m.11 Gene.11::S0009.1::g.10  ORF type:complete len:250 (-),score=22.42 Sxl_rink_0008.1:286-1035(-)
QSAISNDEELNKIMDA' |  sed '/^>/s/^>\([^ ]*\) .*/>\1 /'

输出:

>Gene.10::S0008.1::g.10::m.10 
MKGDDFNIITAPVPINRIWWYSLTNRQRIALVFYMSFYVAGTLTNTASMFIDKFYIYIMR
LESLQMGSADPIDYKYLLEVQIVRGFWREDVHEVVDKVFRGKSIGYIKTNLMIPVEIWNN
CQVRSFRGIPCHSVAIICLIFGMLILYYHCTTVALFRTFMILNANLAAILLFIAMSMEYS
AAVEYDYCVNSVFMNRKTGGKAFVRGRYYNRTLEASGSTFKLMMVGDILFFCPMIGLGCY
LLFCNRENL* 
>Gene.11::S0009.1::g.10::m.11 
QSAISNDEELNKIMDA

我不知道标题后面是否留有一个空格,但我还是留下了。

如果在那些长行的字符中任何地方都没有空格,则可以删除所有内容,直到第一个空格被剪切为止:

cut -d' ' -f1

将删除第一个空格之后的所有字符(包括空格,如果空格相关,则为dunno)。

@edit:在OP编辑输入和输出时,答案现在将删除所有内容,直到第一个空格,直到删除第二个空格...

答案 1 :(得分:0)

使用awk,您将获得一个更具可读性的解决方案:

awk 'NR==1{print $1}NR!=1{print}' test.txt

然后,您可以将输出重定向到新文件以存储修订:

 awk 'NR==1{print $1}NR!=1{print}' test.txt > new_test.txt

编辑

我认为有多个文件,每个文件只有一个标头。

awk '{print $1}' test.txt

您的示例可以使用,因为其他行不包含空格

答案 2 :(得分:0)

抢救Perl!

perl -pe 's/ .*// if /^>/' -- file.fasta