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

如何使用awk从多序列FASTA文件中按指定ID列表提取序列?

从FASTA文件中提取匹配指定ID列表的序列

这里有几种实用方法,覆盖脚本和命令行工具,你可以根据自己的环境和需求挑选:

方法1:用BioPython编写脚本

如果你熟悉Python,这个方法灵活且容易扩展。首先确保已经安装了BioPython:

pip install biopython

假设你的ID列表保存在id_list.txt中(每行一个ID),比如:

7P58X:01332:11636
7P58X:01334:11635

然后创建如下Python脚本extract_seqs.py:

from Bio import SeqIO

# 读取ID列表,存入集合提高匹配效率
with open("id_list.txt", "r") as id_file:
    target_ids = {line.strip() for line in id_file if line.strip()}

# 遍历FASTA文件,输出匹配的序列
with open("seq.fasta", "r") as fasta_file, open("extracted_seqs.fasta", "w") as output_file:
    for record in SeqIO.parse(fasta_file, "fasta"):
        if record.id in target_ids:
            SeqIO.write(record, output_file, "fasta")

运行脚本:

python extract_seqs.py

运行后会生成extracted_seqs.fasta,里面就是你要的匹配序列。

方法2:用awk命令行工具

如果不想写脚本,awk是个轻量快速的选择,不需要额外安装依赖。同样假设ID列表在id_list.txt中,直接在终端运行:

awk 'NR==FNR {ids[$1]; next} /^>/ {flag=($1 in ids)} flag' id_list.txt seq.fasta > extracted_seqs.fasta

命令解释:

  • NR==FNR {ids[$1]; next}:先读取id_list.txt,把每个ID存入数组ids
  • /^>/ {flag=($1 in ids)}:遇到FASTA的标题行(以>开头),检查当前ID是否在ids数组里,设置标记flag
  • flag:如果flag为真,就输出当前行(包括标题和序列行)

方法3:用seqkit工具

seqkit是专门为生物信息学设计的命令行工具,处理FASTA/Q文件非常高效。先安装seqkit(可以通过conda或者官方渠道下载),然后运行:

seqkit grep -f id_list.txt seq.fasta > extracted_seqs.fasta

这个命令非常简洁,-f参数指定ID列表文件,直接输出匹配的序列。

示例输出

如果你的ID列表包含7P58X:01332:11636和7P58X:01334:11635,那么extracted_seqs.fasta的内容会是:

7P58X:01332:11636
TTCAGCAAGCCGAGTCCTGCGTCGTTACTTCGCTT
CAAGTCCCTGTTCGGGCGCC
7P58X:01334:11635
TTCAGCAAGCCGAGTCCTGCGTCGAGAGATCGCTTT
CAAGTCCCTGTTCGGGCGCCACTGCGGGTCTGTGTC
GAGCG

内容的提问来源于stack exchange,提问作者Dalibor Miklík

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:16:27