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

问题描述 投票:0回答:2

我有一个 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

linux bash unix sed character
2个回答
0
投票

怎么样:

grep '[' 我的文件.txt | sed -E 's/.[//' | sed -E 's/].//'


0
投票

您可以使用

grep
sed
的组合:

grep -Eo '\[.*?\]' input.fa | sed -E 's:\[(\w)\w*\s*(.+)\]:\1.\2:g' >output.fa

Here

grep -o
仅从您的输入文件中查找并输出方括号及其内容。

sed
删除括号并用它的第一个字母和一个点替换第一个单词。

Switch

-E
在两个命令中启用 ERE 而不是 BRE。

编辑:如果你想用

[Rhizophagus clarus]
替换
[R.clarus]
并保留所有其他内容它更简单:

sed -E 's:\[(\w)\w*\s*(.+?)\]:[\1.\2]:g' input.fa >output.fa
© www.soinside.com 2019 - 2024. All rights reserved.