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

如何仅编辑FASTA文件头部第一列,去除连字符后的内容?

处理FASTA文件头部:移除第一列的AccessionID并保留其余内容

原始FASTA文件头部结构:

>Saurogobio_punctatus-NC_080528.1|taxid=1771284|cellularorganisms,Eukaryota,Opisthokonta,Metazoa
GCTAGCGTAGCTTAATATAAAGCATAACACTGAAGATGTTAAGATGAGCCCTAA

需求是:仅修改头部的第一列,去除其中连字符-后的AccessionID部分,保留头部其余所有内容,处理后效果如下:

>Saurogobio_punctatus|taxid=1771284|cellularorganisms,Eukaryota,Opisthokonta,Metazoa
GCTAGCGTAGCTTAATATAAAGCATAACACTGAAGATGTTAAGATGAGCCCTAA

你之前尝试的sed命令错误原因是正则匹配逻辑有误:它把|作为匹配起点,并用.*$直接删掉了连字符之后的所有内容,导致头部其余部分丢失。

解决方案1:使用awk(适配你之前的处理习惯)

利用awk按|分割字段的特性,只修改第一列,自动保留后续所有字段:

awk 'BEGIN { FS=OFS="|" } /^>/ { sub(/-[^-]*$/, "", $1); print; next } { print }' input.fasta > output.fasta

逻辑说明:

  • BEGIN { FS=OFS="|" }:设置输入、输出的字段分隔符均为|
  • /^>/:仅匹配FASTA头部行
  • sub(/-[^-]*$/, "", $1):对第一列执行替换,将末尾的-及其后的所有非-字符(即AccessionID)清空
  • print:输出修改后的完整头部行,后续字段自动保留
  • next:跳过后续逻辑,直接处理下一行
  • { print }:非头部行直接原样输出

解决方案2:使用sed(修正正则匹配逻辑)

调整正则表达式,仅匹配第一列内的目标内容,不影响头部其余部分:

sed -E '/^>/s/^>([^|]+)-[^|]+(.*)/>\1\2/' input.fasta > output.fasta

逻辑说明:

  • /^>/:仅匹配头部行
  • ^>([^|]+)-[^|]+(.*):
    • ^>:匹配头部起始的>符号
    • ([^|]+):捕获第一列中-之前的物种名称(所有非|字符)
    • -[^|]+:匹配-和后续的AccessionID(直到第一个|为止)
    • (.*):捕获头部中第一个|之后的所有内容
  • >\1\2:替换为> + 捕获的物种名称 + 捕获的后续头部内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:40