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

如何删除FASTA文件中长度不足5的序列及其对应标题行?

解决FASTA文件中删除短序列及其对应标题的问题

问题场景

我有一个FASTA格式的文件,内容如下:

>seq1
GAAAT
>seq2
CATCTCGGGA
>seq3
GAC
>seq4
ATTCCGTGCC

需求是删除所有不以“>”开头且长度小于5的序列行,同时删除其上方对应的标题行。预期输出:

>seq2
CATCTCGGGA
>seq4
ATTCCGTGCC

之前尝试用sed -r '/^.{,5}$/d',但这个命令会误删以“>”开头的标题行(比如>seq1长度刚好是5,会被匹配删除),需要正确的处理方法。


解决方案1:用awk处理(推荐,逻辑更清晰)

awk可以很方便地成对处理FASTA的标题行和序列行,命令如下:

awk '/^>/ {hdr=$0; next} length($0)>=5 {print hdr; print}' input.fasta

命令解释:

  • 当匹配到以>开头的标题行时,把该行内容存入变量hdr,然后用next跳过后续处理,直接处理下一行
  • 当处理序列行时,判断该行长度是否≥5:
    • 如果满足条件,就输出之前保存的标题行hdr,再输出当前序列行
    • 如果不满足,直接跳过不输出

解决方案2:用sed的多行模式处理

如果偏好sed,可以利用其保持空间(hold space)来暂存标题行,命令如下:

sed -n '/^>/{h;};/^.{1,4}$/{d};g;G;p' input.fasta

命令解释:

  • /^>/{h;}:匹配标题行,将其存入保持空间
  • /^.{1,4}$/{d}:匹配长度≤4的序列行(即小于5的),直接删除
  • g:将保持空间的内容(标题行)覆盖到模式空间
  • G:将当前模式空间的内容(序列行)追加到保持空间内容之后
  • p:输出最终的模式空间内容(标题+符合要求的序列)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:09:24