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

基于Name.txt匹配项提取sequence.faa中对应蛋白序列的方案

从FASTA文件中批量提取指定ID的序列条目

下面给你几个实用的命令行解决方案,基于awk、sed这类常用工具,适配FASTA格式的蛋白序列文件:

方案1:用awk(推荐,高效处理大文件)

awk能一次性加载ID列表,遍历FASTA文件时精准输出匹配条目,逻辑清晰且性能出色:

# 通用版:适配ID行带额外注释的场景(比如>XP_037759835.2 gene=ABC)
awk 'NR==FNR {ids[$1]; next} /^>/ {current_id=substr($0,2); split(current_id, arr, /[[:space:]]/); current_id=arr[1]; flag=(current_id in ids)} flag' Name.txt sequence.faa

如果你的FASTA文件ID行只有>XP_037759835.2这种纯ID格式,用更简洁的版本:

awk 'NR==FNR {ids[$1]; next} /^>/ {flag=(substr($0,2) in ids)} flag' Name.txt sequence.faa

原理:

  • 先处理Name.txt,把所有ID存入数组ids
  • 处理sequence.faa时,遇到>开头的行就提取ID部分,判断是否在数组内,标记是否输出
  • 标记为真时,输出当前行及后续序列行,直到下一个>行到来时重新判断标记

方案2:用sed(适合小文件,逻辑直观)

先把ID列表转换成sed的匹配规则,再提取对应条目:

sed -n "$(sed 's/^/\/^>/; s/$/\/,\/^>\//!p/' Name.txt)" sequence.faa

原理:

  • 内层sed把每个ID转换成/^>ID/,/^>\//!p的规则,意思是从匹配>ID的行开始,到下一个>行之前的所有内容都输出
  • 外层sed执行这些规则,提取目标序列条目

注意事项

  • 确保Name.txt里的ID和sequence.faa中的ID完全一致(包括版本号、大小写),如果需要忽略大小写,可以在awk里用tolower(current_id)和tolower($1),或者在sed规则里加I参数(比如/^>ID/I)
  • 不管序列是单行还是多行,上述命令都能正确处理,无需指定序列行数

内容的提问来源于stack exchange,提问作者Dr. Coke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:10:14