这是我的 file1.fa(seqID, \t, sequence),它不是标准的 fasta 格式文件。
abc MFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNISGPGGTGKTFLMSHLIDDTMPA
cef AFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNESGPGGTGKTFLMSHLIDDTMFA
rig AAAAAAAAAAAAAAAAAAAAAAAAAAGGEGKFKKKKKSKKKKKKKKKKKKKKKKKKK
现在我想将其转换为标准 fasta 格式,如下所示:
>abc
MFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNISGPGGTGKTFLMSHLIDDTMPA
>cef
AFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNESGPGGTGKTFLMSHLIDDTMFA
>rig
AAAAAAAAAAAAAAAAAAAAAAAAAAGGEGKFKKKKKSKKKKKKKKKKKKKKKKKKK
我已经尝试过这样的操作,但我不知道如何添加“>”,有人可以帮助我吗?
less -S file1.fa | sed 's/\t/\n/g' > file2.fa
答案1
您可以简单地使用sed
而不使用less
.您还可以编辑该文件到位而不将输出重定向到新文件。
你的sed
命令将变成:
sed -i'.bak' 's/\(.*\)\t/>\1\n/g' file1.fa
或者如果您不想编辑到位您可以使用:
sed 's/\(.*\)\t/>\1\n/g' file1.fa > file2.fa
答案2
使用乐(以前称为 Perl_6)
raku -pe 's/^ (<:Ll>+) (\s) />$0\n/;'
#OR
raku -pe 's/^ <((<:Ll>+) (\s))> <:Lu>+ />$0\n/;'
这些答案使用 Raku 的:Ll
(Unicode 字母小写)和:Lu
(Unicode 字母大写)字符类定义:
https://docs.raku.org/language/regexes#Unicode_properties
如果您愿意,可以简单地替换\S+
为表示一个或多个非空白字符。您还可以更改\s
为更具体的\t
令牌。
在第二个示例中,Raku 的<(
...)>
捕获标记指示 Raku 删除匹配对象之外的所有内容,因此<:Lu>+
在替换中会匹配(但不会删除)。
输入示例:
abc MFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNISGPGGTGKTFLMSHLIDDTMPA
cef AFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNESGPGGTGKTFLMSHLIDDTMFA
rig AAAAAAAAAAAAAAAAAAAAAAAAAAGGEGKFKKKKKSKKKKKKKKKKKKKKKKKKK
示例输出:
>abc
MFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNISGPGGTGKTFLMSHLIDDTMPA
>cef
AFSKPTKAPLNKGQEAVAKEFFDFLLDPNATEFNESGPGGTGKTFLMSHLIDDTMFA
>rig
AAAAAAAAAAAAAAAAAAAAAAAAAAGGEGKFKKKKKSKKKKKKKKKKKKKKKKKKK
https://docs.raku.org/language/regexes
https://conf.raku.org/talk/156
https://raku.org