我有一个MSA fasta文件,标题是这种格式-
GAN08245.1/5-191 cyclin-L1 [Mucor ambiguus]
LNNPLASLEQLETTVSRR-DGISEELEADLRNLGAELIQSAGILLKLPQVAMATAQVLFQRFFYMSLKEFGI
V-EIGGLFLASTHLITVYDLIIRKMKGIVPLDAFSKAYNLKNAIAAEMQILRQLGFIVHVQLPYNMINYLRI
LGLISKRAWNYLNDEPATIACAAICREQGIKLPTLPGWWDVSAT-L----------------------
GES74777.1/6-191 cyclin-like protein [Rhizophagus clarus]
LQNAILTYGQLETTPSKK-DNIPEELEDELRRLGCDFVQSAGIVLRLPQVAMATAQVLFQRIIKESLLKGH-
----------------------RRYRNNESLEYLGVFYEMKDLVIAEMQILKKLGFNVHVQLPYGMVNYLKV
LELIPQKAWGYLNDQPATIACAVIARIAQVKLPTSPPWWEAEDE-ISRHIMRLY-NLPLDELEYLKKG
我希望输出只包含M.ambiguus
,R.clarus
等,并保持序列。
如何使用sed
命令来实现?或者是否有其他命令来执行此操作?
我尝试使用awk
,它提取出没有任何序列的名称。
awk -F '[][]' '{print $2}' input.fa > output.fa
您可以使用grep
和sed
的组合:
grep -Eo '[.*?]' input.fa | sed -E 's:[(w)w*s*(.+)]:1.2:g' >output.fa
这里grep -o
只从输入文件中查找并输出方括号及其内容。
sed
删除括号,并将第一个单词替换为第一个字母和一个点。
两个命令中的-E
开关使能ERE而不是BRE。
编辑:如果你想用[R.clarus]
替换[Rhizophagus clarus]
并保留所有其他内容,那就更简单了:
sed -E 's:[(w)w*s*(.+?)]:[1.2]:g' input.fa >output.fa
这可能适合您(GNU sed):
sed -nE 's/.*[(.)S+ ([^]]*)].*/1.2/p' file
关闭隐式打印-n
和扩展regexp-E
。
匹配方括号内的第一个字符和第二个单词,并根据需要打印结果。
如何:
grep '[' my file.txt | sed -E 's/.*[//' | sed -E 's/].*//'