linux 如何使用sed命令从fasta头中提取[ ]括号内的内容?

qgzx9mmu  于 2023-04-11  发布在  Linux
关注(0)|答案(3)|浏览(336)

我有一个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.ambiguusR.clarus等,并保持序列。
如何使用sed命令来实现?或者还有其他命令可以做到这一点吗?
我试过使用awk,它提取出的名称没有任何序列。
awk -F '[][]' '{print $2}' input.fa > output.fa

wydwbb8l

wydwbb8l1#

您可以使用grepsed的组合:

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
6vl6ewon

6vl6ewon2#

这可能对你有用(GNU sed):

sed -nE 's/.*\[(.)\S+ ([^]]*)\].*/\1.\2/p' file

关闭隐式打印-n并启用扩展regexp -E
匹配方括号内的第一个字符和第二个单词,并根据需要打印结果。

kulphzqa

kulphzqa3#

怎么样:

grep '\[' my file.txt | sed -E 's/.*\[//' | sed -E 's/].*//'

相关问题