我有一个包含特定蛋白质的多个序列(氨基酸序列)的 fasta 文件。序列的最后一个字符表示为“*”,它实际上代表终止密码子。我正在尝试使用 MUSCLE 进行多序列比对,但该工具拒绝所有最后带有“*”的序列。
如何删除“*”?
例如我的输入文件是:
>seq1
MSDGFHS*
>Seq2
MSDRFH*
我需要的是:
>seq1
MSDGFHS
>Seq2
MSDRFH
我有一个包含特定蛋白质的多个序列(氨基酸序列)的 fasta 文件。序列的最后一个字符表示为“*”,它实际上代表终止密码子。我正在尝试使用 MUSCLE 进行多序列比对,但该工具拒绝所有最后带有“*”的序列。
如何删除“*”?
例如我的输入文件是:
>seq1
MSDGFHS*
>Seq2
MSDRFH*
我需要的是:
>seq1
MSDGFHS
>Seq2
MSDRFH
与
sed
. 例如:这将删除行尾的任何文字星号字符 (
*
)。您可以使用 sed 的
-i
选项来编辑原始文件。或者只是将sed
的输出重定向到一个新的 fasta 文件并将其用作 MUSCLE 的输入,如果您还需要将原始文件与其他程序一起使用,这将是一个更好的选择(通常最好不要永久删除信息 - 一旦您删除数据,不能保证你能把它找回来。备份总是好的,因为使用临时修改版本的文件用于特殊目的)。如果您的数据不包含
*
您想要保留的其他位置的 s,那么这是一项tr
存在要做的工作:vi
作品:这告诉
vi
解决文件中的所有行 (1,$
),并且每当*
在行尾 () 找到文字(因为它是正则表达式元字符而被转义$
)时,它会被替换为空,即被删除。正如
@roaima
现在已删除的评论中所指出的,搜索和替换命令可以更方便地编写为:使用Raku(以前称为 Perl_6)
样本输入:
样本输出:
到这个时候,您应该熟悉
s///
“ triple-solidus ”成语了。以上是在 Perl 编程语言家族的成员 Raku 中执行的习语。该-e
标志告诉 Raku 期待一个“单线”程序(而不是,例如,脚本文件的名称),strict
默认情况下启用。该-p
标志运行代码逐行自动打印$_
每行末尾的主题变量。在两个左斜线字符之间,正则表达式搜索
\*
(反斜杠转义的)文字星号,然后是$
字符串结尾的零宽度断言。两个右斜线字符之间没有任何内容,因此任何行尾星号都被替换为无内容(即删除)。在一个有趣的转折中,您可以切换到 Raku 的
-ne
非自动打印逐行标志,并且s///
习语将逐行返回您选择的要修改/删除的内容(假设您已附加了类似的打印语句say
) :最后,如果您对生物信息学工具包没有强烈的偏好,您可以考虑BioPerl或BioPerl6。
https://raku.org