我有 N 个像这样的文件中序列
>668|CAX10446 conserved hypothetical protein
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
>669|CAX10447 conserved protein
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
或者像这样
>gi|76167242|gb|AAX50250.1| hypothetical protein CTA_0001
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR
现在,我需要一个grep
命令来删除第一行中的特定单词或数字。
输出应该是:
>CAX10446 conserved hypothetical protein
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
或者
>AAX50250.1| hypothetical protein CTA_0001 [Chlamydia trachomatis A/HAR-13]
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRAAESRS
SSRTARGASSGYREYSPSAAR
我需要一个 grep 命令来执行此操作,我用过sed
但它删除了第一行,即 ID,因此很难识别哪个序列是哪个。
答案1
看起来您想要删除最后一个|
字符之前的所有内容。但是,您的第二个示例|
在 ID 之后和 之前有一个hypothetical protein
。据推测,在这种情况下,您想要删除最后一个字符之前|
没有空格的所有内容。
以下是一种方法:
$ sed 's/| / /; s/^[^ ]*|/>/' file.pep
>CAX10446 conserved hypothetical protein
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
>AAX50250.1 hypothetical protein CTA_0001
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR
删除s/| / /;
任何|
后跟空格的字符。这将从|
中删除AAX50250.1|
。在行首 ( )s/^[^ ]*|/>/
处查找,并删除最长的非空格字符串 ( ) 字符,直到行末。>
^>
[^ ]
|
答案2
如果你想用 grep 来做这件事。你应该在每个空行后读取 3 行并将其复制到变量中。你应该剪切变量的最后一部分。
解析器将会执行此操作;
第一reverse
串
第二cut
串与|
并得到第一
第三reverse
弦
echo $yourstring |rev |cut -d'|' -f1|rev
顺便说一句,这不会删除,只会显示部分内容。如果您想保存输出,请将其重定向到文件。
echo $yourstring |rev |cut -d'|' -f1|rev > yournewfile