You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed命令提取FASTA头文件[]内内容并保留序列?

处理FASTA文件头格式并保留序列的方法

需求场景

现有多序列比对(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),同时完整保留序列内容。此前使用awk -F '[][]' '{print $2}' input.fa > output.fa仅提取了物种名称,丢失了序列,需修正。

解决方案

方法1:使用sed命令

利用sed的正则替换功能,仅修改包含物种名称的头部行,序列行保持不变:

sed -E 's/^.*\[([A-Z])[a-z]+ ([a-z]+)\]$/1.2/' input.fa > output.fa
  • 逻辑说明:
    1. -E启用扩展正则表达式,简化语法
    2. ^.*\[([A-Z])[a-z]+ ([a-z]+)\]$匹配头部行:捕获属名的首字母(大写)和完整种名(小写)
    3. 1.2将整行替换为「属名首字母+点+种名」的格式
    4. 非头部行(序列行)因不匹配正则,直接原样输出

方法2:使用awk命令

改进awk逻辑,区分头部行和序列行分别处理:

awk -F '[][]' '/\[.*\]/ {split($2, sp, " "); print substr(sp[1],1,1)"."sp[2]} !/\[.*\]/ {print}' input.fa > output.fa
  • 逻辑说明:
    1. -F '[][]'以[或]为分隔符,提取[]中的物种全称(如Mucor ambiguus)
    2. /\[.*\]/匹配头部行:通过split将物种全称按空格分割为属名和种名,再拼接成缩写格式输出
    3. !/\[.*\]/匹配序列行:直接原样输出

注意事项

  • 如果你的FASTA头部带有标准的>前缀,只需调整正则表达式,例如sed命令修改为:
    sed -E 's/^.*\[([A-Z])[a-z]+ ([a-z]+)\]$/>1.2/' input.fa > output.fa
    
  • 若物种名称包含特殊字符或大小写不规则,需根据实际情况微调正则规则。

内容的提问来源于stack exchange,提问作者Drishtee Barua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:47:41