第3章 高通量测序数据格式基础:FASTA、FASTQ、GFF/GTF 格式详解

我记得刚入行那会儿,拿到第一个 RNA‑seq 项目,一堆看不懂的文件后缀直接把我干懵了。.fasta、.fastq、.gtf……每个文件打开都像天书。后来踩了不少坑,才把这些格式的脾气摸清楚。今天咱们就把这三兄弟彻底聊透。

说白了,这三个格式负责的事完全不同:FASTA 存参考序列,FASTQ 存测序读段,GFF/GTF 存基因组注释。你想想看,没有它们,差异分析连第一步都迈不出去。

3.1 FASTA 格式——参考基因组的“标准字典”

FASTA 是最基础的序列格式。结构极其简单:一行以 > 开头的描述行,后面跟实际的 DNA/RNA/蛋白质序列。

一个典型的 FASTA 文件长这样:

>chr1 AC:12345
AGCTTAGCTAGCTAGCGTACGATCGATCGATCGTAGCTAGCTAGCTAGC
GCTAGCTAGCTAGCTAGGCTAGCTAGCTAGCTAGCTAGCTAGCTAGC

我习惯把 > 后面的部分叫做“头信息”。这里面可以塞各种 ID、物种名、染色体号。序列行可以换行,但别加空格——我以前犯过这个错,BWA 直接报错说非法字符。

避坑指南: 我曾在项目中遇到过某供应商给的参考基因组,FASTA 序列行末尾多了 \r\n 导致比对软件崩溃。记得用 dos2unix 一键转换。

FASTA 的用途很广:参考基因组、转录本序列、蛋白库都靠它。但在 RNA‑seq 里,我们通常用来自 UCSC/Ensembl/NCBI 的参考基因组 FASTA。建议下载时注意版本号,比如 hg38、mm10,不然回头比对结果对不上。

3.2 FASTQ 格式——测序仪吐出来的“原始凭证”

FASTQ 跟 FASTA 最大的区别:它带了质量评分。每条记录占 4 行:

@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
GTATCATCATCTAGCTAGTACGTATCGTACGTACGTACGATCGTACGTAGC
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

第一行是 @ 开头的 ID(注意跟 FASTA 的 > 区分);第二行是序列;第三行只有 +,后面可带可选 ID(现代测序平台通常留空);第四行是质量字符串,每个字符对应一个碱基的测序质量。

质量值怎么算?Phred 质量分数 Q = -10 * log₁₀(P),P 是碱基出错的概率。比如 Q=30 表示错误概率 0.1%,准确率 99.9%。我一般把 Q<20 的碱基当作低质量过滤掉。

注意编码版本! Illumina 1.8+ 用 Phred+33(ASCII 33-126),老版本用 Phred+64。混用的话,质量值可能完全错位。我吃过一次亏——用 FastQC 检查时发现质量分布诡异,才发现是 SRA 下载的数据用了旧编码。

实际项目中,FASTQ 文件通常经过 gzip 压缩(.fastq.gz)。直接解压会占大量磁盘,我建议使用 zcat、seqtk 或 samtools fastq 等工具流式处理,不落地解压。

3.3 GFF / GTF 格式——基因组的“地图注释”

这两个格式都是表格形式的注释文件,用 9 列制表符分隔。GFF(General Feature Format)版本 3 最常用;GTF(Gene Transfer Format)可以理解为 GFF 的一个简化变种,专门为基因结构设计。

GFF3 的 9 列分别是:

序号 列名 说明
1 seqid 染色体/ scaffold ID
2 source 注释来源(如 Ensembl、NCBI)
3 type 特征类型(gene, transcript, exon, CDS 等)
4 start 起始坐标(1-based)
5 end 终止坐标
6 score 置信度(通常用 . 占位)
7 strand 链方向 + 或 -
8 phase CDS 起始偏移(0,1,2;非 CDS 特征用 .)
9 attributes 键值对列表,分号分隔(如 gene_id "ENSG001"; transcript_id "ENST001")

GTF 与 GFF3 的区别主要在第九列。GTF 要求所有属性用引号括起来,且包含 gene_id 和 transcript_id。我习惯用 GTF 做 RNA‑seq 定量,因为很多工具(如 featureCounts)对 GTF 解析更稳定。

实战技巧: 我写 pipeline 时,会先用 grep -P '\tgene\t' 看有多少基因,再用 cut -f9 | cut -d';' -f1 | sort -u | wc -l 检查基因 ID 是否冗余。如果一个 gene_id 出现多次,说明注释文件可能合并了多个转录本版本——这并不罕见,但做差异分析时要留意。

另一个常见坑:染色体 ID 格式不一致。例如 UCSC 用 chr1,Ensembl 用 1。FASTA 与 GTF 的 seqid 必须匹配,否则比对结果无法转换成基因计数。我曾经花了一整天排查为什么 90% 的 reads 没被分配到基因,最后发现是染色体名字没对上。

三种格式的对比与在 RNA‑seq 中的角色

我把核心区别总结成下面这张表,方便你快速查阅:

特性 FASTA FASTQ GFF/GTF
主要数据 参考序列(DNA/RNA/蛋白) 测序读段 + 质量 基因组注释(基因、转录本、外显子等)
行数 / 记录 2 行(描述+序列) 4 行(ID, 序列, +, 质量) 9 列制表符
是否包含质量 否 是 否
典型扩展名 .fa, .fasta, .fna .fastq, .fq .gff, .gff3, .gtf
RNA‑seq 中的作用 构建参考索引(比对所需的模板) 比对/定量的输入(原始数据) 定义特征区域用于基因水平定量
RNA‑seq 数据格式在分析流程中的角色 参考基因组 (FASTA) 染色体序列 注释文件 (GTF/GFF) 基因、外显子、CDS 原始测序 (FASTQ) 读段 + 质量值 比对结果 (BAM/SAM) 读段-基因组坐标映射 基因表达矩阵 将 BAM + GTF → 计数表 格式一致性关键点 • FASTA 与 GTF 的染色体 ID 必须一致(如 chr1 vs 1) • FASTQ 质量编码版本(Phred+33 还是 +64)务必确认,否则 QC 结果会误导 • GTF 文件建议保持原始编码(避免 Windows 换行符),使用 tr -d '\r' 清理

核心要点: RNA‑seq 差异分析 pipeline 的起点就是这三个格式的对齐。FASTA 和 GTF 属于“静态参考资源”,FASTQ 是“动态实验数据”。你可以在网上找到同物种同一版本的参考资源,但 FASTQ 永远是你自己的实验数据。

我记得第一次自己构建索引时,用的是 STAR --runMode genomeGenerate,需要同时提供 FASTA 和 GTF。如果不小心把不同来源的 FASTA 和 GTF 混用,索引能建出来,但后面比对时外显子边界会对不准——结果就是大量的 reads 被标为“unmapped”。

最后说一句:千万别忽视格式检查。写 pipeline 时,我会在第一步加入格式验证:seqtk test 检查 FASTQ,gffread --validate 检查 GTF。这些小动作能省掉无数调试时间。至少我是这么干的——你也不妨试试。