跳转至

24. 生信常见文件格式详解

一句话说明:生物信息学的核心就是处理各种格式的文本文件——序列用FASTA/FASTQ存,比对结果用SAM/BAM/CRAM存,变异位点用VCF存,基因注释用GFF3/GTF存,区间用BED存。掌握这些格式的结构和操作命令,是生信工程师的基本功。


一、序列格式

1.1 FASTA 格式

白话解释:最简单的序列存储格式,就像一个"姓名+内容"的记事本。每条序列有一行以>开头的描述行(header),后面跟着序列本身。

结构

>序列ID 描述信息(可选)
序列内容(可以折行,通常每行60或80个字符)

真实文件示例

>NC_000001.11 Homo sapiens chromosome 1, GRCh38.p14
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCC

>gi|556503834|ref|NC_000913.3| Escherichia coli K-12 MG1655
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTC
TGATAGCAGCTTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGG

逐行解释: - >NC_000001.11> 是标记符,后面是序列唯一标识符 - Homo sapiens chromosome 1 — 空格后的描述信息,工具通常忽略 - 下面的 NNNN...TAACCC... — 实际DNA碱基序列(N表示未知碱基)

FASTA 常用操作命令

# ============ seqkit(推荐的FASTA/FASTQ瑞士军刀) ============

# 统计序列数量和总长度
seqkit stats genome.fasta
# 输出:file  format  type  num_seqs  sum_len  min_len  avg_len  max_len

# 提取指定ID的序列(-p 模式匹配)
seqkit grep -p "NC_000001" genome.fasta > chr1.fasta

# 获取前10条序列
seqkit head -n 10 genome.fasta > first10.fasta

# 将多行FASTA转为单行(方便grep处理)
seqkit seq -w 0 genome.fasta > oneline.fasta

# ============ samtools faidx(建索引+快速提取) ============

# 建FASTA索引(生成.fai文件)
samtools faidx genome.fasta

# 按区间提取序列(chr1的1000到2000位置)
samtools faidx genome.fasta chr1:1000-2000


1.2 FASTQ 格式

白话解释:FASTQ = FASTA + Quality。测序仪下机的原始数据格式,比FASTA多了质量值——每个碱基的"可信度打分"。

结构(固定4行一组):

@序列ID 描述信息
序列内容(一行,不折行)
+(分隔符,可选重复ID)
质量值字符串(和序列等长,每个字符对应一个碱基的质量)

真实文件示例

@SRR1234567.1 1/1
NTGCACGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGAT
+
#8ACCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
@SRR1234567.2 2/1
AGCTTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTA
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:

逐字段解释: - @SRR1234567.1@开头,序列名(SRA登录号.读序编号) - 1/1 — 配对测序中第一条read - NTGCAC... — 碱基序列(N=未知) - + — 分隔符 - #8ACC... — 质量值字符串

质量值编码(Phred+33,当前主流Illumina 1.8+)

字符ASCII码Phred分数错误率含义
!330100%完全不可信
#35263%很差
553201%及格线(Q20)
?63300.1%好(Q30)
I73400.01%很好(Q40)

公式Phred = -10 × log10(错误率),字符 = chr(Phred + 33)

FASTQ 常用操作命令

# ============ 基本统计 ============

# 快速统计(seqkit)
seqkit stats -a sample_R1.fastq.gz
# 输出包含:reads数、总碱基、Q20%、Q30%、GC含量

# 用zcat查看压缩FASTQ的前8行(2条reads)
zcat sample_R1.fastq.gz | head -8

# ============ 质控工具 ============

# FastQC 生成质量报告
fastqc -t 4 -o ./qc_report/ sample_R1.fastq.gz sample_R2.fastq.gz

# fastp 一步完成质控+过滤+报告(推荐)
fastp \
  -i raw_R1.fq.gz -I raw_R2.fq.gz \    # 输入:双端原始数据
  -o clean_R1.fq.gz -O clean_R2.fq.gz \ # 输出:过滤后数据
  -h report.html -j report.json \         # 报告文件
  --qualified_quality_phred 20 \          # Q20以下的碱基视为低质量
  --length_required 50 \                  # 过滤掉<50bp的reads
  --thread 4                              # 4线程


二、比对格式:SAM / BAM / CRAM

白话解释:reads比对到参考基因组后的"贴纸记录"——每条read贴在哪条染色体、哪个位置、朝向如何、贴得好不好,全记在这里。

注:SAM 11个必须字段和基本samtools命令已在 14_比对与组装工具.md 中介绍,本节聚焦补充内容

2.1 三种格式的关系

格式类型大小(30×人类)特点
SAM文本~300 GB人可读,调试用
BAM二进制压缩~60 GB生产标准,需索引
CRAM参考压缩~30 GB最小,需要参考基因组才能解压

CRAM 原理:不存储与参考相同的碱基,只存差异。好比说"和参考一样"而不是重复写一遍。

2.2 FLAG 位标志详细解读

FLAG是一个整数,由多个二进制位"开关"组合而成:

十进制值十六进制含义
010x1read是配对测序(paired)
120x2两端都正确比对(proper pair)
240x4这条read未比对上(unmapped)
380x8配对的那条read未比对上
4160x10比对到反向互补链
5320x20配对read比对到反向互补链
6640x40是第一条read(read1)
71280x80是第二条read(read2)
82560x100非主比对(secondary)
95120x200未通过质控(QC fail)
1010240x400PCR/光学重复
1120480x800补充比对(supplementary)

解读示例:FLAG=99 = 64+32+2+1 → 配对测序 + proper pair + mate反向 + 是read1

在线解析工具:https://broadinstitute.github.io/picard/explain-flags.html

2.3 CIGAR 字符串详解

CIGAR(Compact Idiosyncratic Gapped Alignment Report)描述read如何对齐到参考:

符号含义消耗query消耗reference
M匹配/错配(对齐)
I插入(read有,ref没有)
D缺失(ref有,read没有)
N跳过(RNA-seq的内含子)
S软剪切(碱基保留在SEQ中)
H硬剪切(碱基被删除)
=序列匹配
X序列错配

示例50M2I30M3D20M5S 含义: - 50bp匹配 → 2bp插入 → 30bp匹配 → 3bp缺失 → 20bp匹配 → 5bp软剪切

2.4 补充samtools命令

# ============ 进阶samtools操作 ============

# 查看BAM文件的header(包含参考基因组信息和程序记录)
samtools view -H sorted.bam

# 统计每条染色体的reads数
samtools idxstats sorted.bam
# 输出:染色体名  长度  mapped_reads  unmapped_reads

# 按区域提取(需要已排序+已建索引)
samtools view sorted.bam chr1:1000000-2000000 | head

# 计算测序深度(每个位置覆盖了多少reads)
samtools depth -a sorted.bam > depth.txt
# -a 表示输出所有位置(包括0深度)

# 统计比对质量分布
samtools view sorted.bam | awk '{print $5}' | sort | uniq -c | sort -rn

# ============ BAM转CRAM(节省存储) ============
samtools view -C -T reference.fasta -o output.cram sorted.bam
# -C 输出CRAM格式
# -T 指定参考基因组(CRAM必须)

# CRAM转BAM
samtools view -b -T reference.fasta -o output.bam input.cram

三、变异格式:VCF / BCF

白话解释:VCF(Variant Call Format)是记录"基因组上哪些位置和参考不一样"的标准格式——SNP、InDel、结构变异全在这里。BCF是它的二进制压缩版。

3.1 VCF 文件结构

当前最新版本:VCF v4.5(GA4GH维护)

##fileformat=VCFv4.3
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  Sample1 Sample2
chr1    10177   rs367896724 A   AC  100 PASS    DP=500;AF=0.45  GT:DP:GQ    0/1:30:99   1/1:25:85
chr1    10235   .   T   TA  50  LowQual DP=100;AF=0.12  GT:DP:GQ    0/0:20:60   0/1:15:40
chr1    10352   rs201106462 T   TA  200 PASS    DP=800;AF=0.55  GT:DP:GQ    0/1:45:99   0/1:38:95

3.2 8个固定列详解

列号字段含义示例
1CHROM染色体chr1
2POS位置(1-based)10177
3ID变异ID(dbSNP编号)rs367896724
4REF参考碱基A
5ALT替代碱基(变异)AC(=插入了C)
6QUAL变异质量分数100(越高越可靠)
7FILTER过滤状态PASS=通过,否则写原因
8INFO附加信息(键=值对)DP=500;AF=0.45

3.3 INFO 常见字段

字段含义典型用法
DP总测序深度过滤低深度位点
AF等位基因频率区分常见/罕见变异
MQ平均比对质量评估区域可靠性
QD质量/深度比GATK常用过滤指标
FSFisher链偏倚检测正反链不平衡
SOR链偏倚优化指标替代FS
MQRankSumMQ秩和检验ref vs alt比对质量差异
ReadPosRankSum读段位置秩和变异是否偏在read末端

3.4 FORMAT / 样本列

FORMAT列定义样本数据的格式,用冒号分隔:

字段含义示例
GT基因型0/0=纯合参考, 0/1=杂合, 1/1=纯合变异
DP该样本该位点深度30
GQ基因型质量99(最高)
AD各等位基因深度15,12(REF=15reads, ALT=12reads)
PL各基因型似然值0,90,1200(phred-scaled)

3.5 VCF 过滤与 bcftools 命令

# ============ bcftools 常用操作 ============

# 查看VCF基本统计
bcftools stats input.vcf.gz > stats.txt

# 按质量过滤(QUAL>=30 且 深度>=10)
bcftools filter -i 'QUAL>=30 && INFO/DP>=10' input.vcf.gz -o filtered.vcf.gz

# GATK硬过滤推荐参数(SNP)
bcftools filter -i \
  'QD>=2.0 && FS<=60.0 && MQ>=40.0 && MQRankSum>=-12.5 && ReadPosRankSum>=-8.0' \
  snps.vcf.gz -o snps_filtered.vcf.gz

# 只提取PASS的变异
bcftools view -f PASS input.vcf.gz -o pass_only.vcf.gz

# 提取指定区域
bcftools view -r chr1:1000000-2000000 input.vcf.gz

# 提取指定样本
bcftools view -s Sample1,Sample2 input.vcf.gz -o subset.vcf.gz

# VCF转BCF(二进制压缩)
bcftools view -Ob input.vcf.gz -o output.bcf
bcftools index output.bcf

# 合并多个VCF
bcftools merge sample1.vcf.gz sample2.vcf.gz -o merged.vcf.gz

# 注释变异(添加rsID)
bcftools annotate -a dbsnp.vcf.gz -c ID input.vcf.gz -o annotated.vcf.gz

# 统计变异类型(SNP/InDel比例)
bcftools stats input.vcf.gz | grep "^SN"

四、注释格式:GFF3 / GTF / BED

4.1 GFF3 格式(Generic Feature Format v3)

白话解释:基因组的"标签贴纸"——记录每个基因、外显子、CDS在基因组上的位置。由Sequence Ontology维护,当前版本1.26。

9列结构(Tab分隔):

字段名含义示例
1seqid染色体/scaffoldchr1
2source注释来源ensembl
3type特征类型(SO术语)gene / mRNA / exon / CDS
4start起始位置(1-based)11869
5end终止位置(含)14409
6score分数.(无分数用点号)
7strand+ 或 -
8phaseCDS相位(0/1/2).(非CDS用点号)
9attributes属性键值对ID=gene0001;Name=DDX11L1

真实GFF3示例

##gff-version 3
chr1    ensembl gene    11869   14409   .   +   .   ID=ENSG00000223972;Name=DDX11L1;biotype=transcribed_unprocessed_pseudogene
chr1    ensembl mRNA    11869   14409   .   +   .   ID=ENST00000456328;Parent=ENSG00000223972;Name=DDX11L1-201
chr1    ensembl exon    11869   12227   .   +   .   ID=exon0001;Parent=ENST00000456328
chr1    ensembl exon    12613   12721   .   +   .   ID=exon0002;Parent=ENST00000456328
chr1    ensembl exon    13221   14409   .   +   .   ID=exon0003;Parent=ENST00000456328

4.2 GTF 格式(Gene Transfer Format / GFF2.5)

白话解释:GTF是GFF的"方言",用 gene_idtranscript_id 做层级关系,是Ensembl和GENCODE的主要发布格式。

与GFF3的关键区别

区别点GFF3GTF
层级关系Parent= 属性gene_id + transcript_id
属性格式key=value;key "value";
CDS相位phase列frame列(含义类似)
标准SO维护Ensembl/GENCODE事实标准

真实GTF示例

chr1    ensembl gene    11869   14409   .   +   .   gene_id "ENSG00000223972"; gene_name "DDX11L1"; gene_biotype "transcribed_unprocessed_pseudogene";
chr1    ensembl transcript  11869   14409   .   +   .   gene_id "ENSG00000223972"; transcript_id "ENST00000456328"; gene_name "DDX11L1";
chr1    ensembl exon    11869   12227   .   +   .   gene_id "ENSG00000223972"; transcript_id "ENST00000456328"; exon_number "1";

4.3 BED 格式

白话解释:最简洁的"区间记录"格式——只需三列(染色体、开始、结束)就能表示基因组上的一段区域。

核心特点0-based、半开区间(start包含,end不包含)

字段说明必须?
1chrom染色体
2chromStart起始位置(0-based)
3chromEnd终止位置(不含)
4name区间名称
5score分数(0-1000)
6strand链方向(+/-)
7-12...颜色、block等可视化信息

坐标系统对比(超级重要!面试常考):

格式坐标起始区间类型chr1第1个碱基
BED0-based半开 [start, end)0-1
GFF3/GTF1-based闭合 [start, end]1-1
SAM/VCF1-based闭合1

真实BED示例

chr1    11868   14409   DDX11L1 0   +
chr1    14403   29570   WASH7P  0   -
chr1    29553   31109   MIR1302-2HG 0   +

4.4 注释格式常用操作

# ============ 格式转换 ============

# GFF3转GTF(用gffread,来自Cufflinks/StringTie)
gffread annotation.gff3 -T -o annotation.gtf

# GTF转BED(用UCSC的gtfToGenePred + genePredToBed)
gtfToGenePred annotation.gtf /dev/stdout | genePredToBed /dev/stdin genes.bed

# 或用awk快速提取基因区间为BED
awk '$3=="gene"' annotation.gtf | \
  awk -F'\t' '{OFS="\t"; print $1, $4-1, $5, ".", "0", $7}' > genes.bed

# ============ bedtools 常用操作 ============

# 求两个BED文件的交集(找重叠区域)
bedtools intersect -a peaks.bed -b genes.bed > overlap.bed

# 求交集并报告重叠比例
bedtools intersect -a peaks.bed -b genes.bed -wo > overlap_with_size.bed

# 求不重叠的区域(A有但B没有)
bedtools subtract -a peaks.bed -b blacklist.bed > clean_peaks.bed

# 合并重叠或相邻的区间
bedtools merge -i sorted_peaks.bed > merged.bed

# 统计每个基因区域内有多少peaks
bedtools coverage -a genes.bed -b peaks.bed > gene_coverage.bed

# 获取BED区间对应的FASTA序列
bedtools getfasta -fi genome.fasta -bed regions.bed -fo regions.fa

# 在BED区间两侧各扩展1000bp
bedtools slop -i peaks.bed -g genome.sizes -b 1000 > expanded.bed

# 随机生成与输入BED相同大小的区间(用于统计背景)
bedtools shuffle -i peaks.bed -g genome.sizes > random_regions.bed

五、其他格式

5.1 Wiggle / BigWig(连续信号轨迹)

用途:存储基因组上的连续数值信号(如测序深度、ChIP-seq信号、conservation score)。

Wiggle(WIG)是文本格式,BigWig是其二进制索引版本,适合基因组浏览器加载大数据。

# 固定步长格式(fixedStep)
fixedStep chrom=chr1 start=1 step=10 span=10
10.5
12.3
8.7
15.2

# 可变步长格式(variableStep)
variableStep chrom=chr1 span=10
1000  15.3
1020  8.9
1050  22.1

操作命令

# BAM转BigWig(用deeptools)
bamCoverage -b sorted.bam -o coverage.bw --normalizeUsing RPKM

# WIG转BigWig(需要chrom.sizes文件)
wigToBigWig input.wig chrom.sizes output.bw

# BigWig转BedGraph(可编辑的文本格式)
bigWigToBedGraph input.bw output.bedGraph

5.2 BEDPE(配对区间格式)

用途:描述配对事件(如结构变异的两个断点、Hi-C交互区域)。

chr1    1000    2000    chr1    5000    6000    SV001   50  +   -
chr2    30000   31000   chr5    80000   81000   translocation1  99  +   +

字段:chrom1, start1, end1, chrom2, start2, end2, name, score, strand1, strand2

5.3 MAF(Mutation Annotation Format)

用途:TCGA/GDC肿瘤突变数据的标准格式,包含突变的详细注释。

Hugo_Symbol  Chromosome  Start_Position  End_Position  Variant_Classification  Variant_Type  Reference_Allele  Tumor_Seq_Allele2
TP53         chr17       7674220         7674220       Missense_Mutation       SNP           C                 T
BRCA1        chr17       43093488        43093488      Nonsense_Mutation       SNP           G                 A

关键字段:基因名、变异分类(Missense/Nonsense/Frameshift等)、肿瘤vs正常样本的等位基因。


六、格式转换工具速查表

转换方向命令
SAM → BAMsamtools view -bS input.sam > output.bam
BAM → SAMsamtools view -h input.bam > output.sam
BAM → CRAMsamtools view -C -T ref.fa input.bam > output.cram
CRAM → BAMsamtools view -b -T ref.fa input.cram > output.bam
BAM → FASTQsamtools fastq -1 R1.fq -2 R2.fq input.bam
BAM → BigWigbamCoverage -b input.bam -o output.bw (deeptools)
VCF → BCFbcftools view -Ob input.vcf.gz -o output.bcf
BCF → VCFbcftools view output.bcf > output.vcf
GFF3 → GTFgffread input.gff3 -T -o output.gtf
GTF → BEDgtfToGenePred → genePredToBed (UCSC工具链)
BED → BAM区域提取samtools view -L regions.bed input.bam > subset.bam
WIG → BigWigwigToBigWig input.wig chrom.sizes output.bw
BAM去重复picard MarkDuplicates I=in.bam O=dedup.bam M=metrics.txt
BAM添加RGpicard AddOrReplaceReadGroups I=in.bam O=out.bam RGID=1 ...
VCF排序bcftools sort input.vcf.gz -o sorted.vcf.gz
VCF建索引bcftools index input.vcf.gztabix -p vcf input.vcf.gz

七、面试怎么答

Q1:FASTA 和 FASTQ 有什么区别?

FASTA只存序列,FASTQ多了质量值。FASTA用于参考基因组、蛋白序列库等"已确定"的序列;FASTQ用于测序仪下机的原始数据,每个碱基都有一个质量分数表示测序的可靠性。质量值用Phred+33编码,Q20表示1%错误率,Q30表示0.1%错误率。

Q2:SAM文件的FLAG字段是什么含义?怎么解读FLAG=83?

FLAG是一个用二进制位表示多个状态的整数。83 = 64 + 16 + 2 + 1,意思是:这条read是配对测序的(1),形成proper pair(2),比对到反向互补链(16),且是第一条read(64)。实际工作中可以用Broad Institute的在线工具解析,或者 samtools flags 83 命令查看。

Q3:VCF文件中GT字段 0/1 和 1/1 分别是什么意思?

GT是genotype(基因型)。0代表参考等位基因(REF),1代表第一个替代等位基因(ALT)。0/1表示杂合变异(一条染色体是参考,另一条是变异),1/1表示纯合变异(两条都变了)。如果用 | 分隔(如 0|1)表示已经做了相位推断(phasing),知道哪条来自父亲哪条来自母亲。

Q4:BED文件是0-based还是1-based?和GFF/VCF有什么区别?

BED是0-based半开区间——start从0开始计数,end不包含在内。GFF3/GTF/VCF/SAM都是1-based闭合区间。比如基因组第1到第100个碱基,BED写 0 100,GFF写 1 100。这个区别极其重要,格式转换时如果忘了 ±1 会导致所有坐标偏移一个碱基。

Q5:如何对VCF文件进行质量过滤?

常用两种策略:(1) 硬过滤,按固定阈值筛选,如 bcftools filter -i 'QUAL>=30 && INFO/DP>=10 && INFO/MQ>=40';(2) VQSR(变异质量重校准),GATK用机器学习模型基于已知变异集训练分类器。GATK推荐的SNP硬过滤参数:QD>=2, FS<=60, MQ>=40, MQRankSum>=-12.5, ReadPosRankSum>=-8.0。

Q6:CIGAR字符串 30M2D20M5I10M3S 怎么解读?

从左到右逐段读:30bp匹配参考→参考有2bp这条read没有(缺失)→20bp匹配→read多了5bp参考没有(插入)→10bp匹配→最后3bp是软剪切(碱基还在SEQ里但没比到参考上)。算read在参考上占的长度:30+2+20+10=62bp(I和S不消耗参考)。

Q7:为什么要用BAM而不是SAM?CRAM比BAM还有什么优势?

SAM是纯文本,30×人类基因组约300GB,BAM用BGZF压缩后约60GB,节省80%空间且支持随机访问(建索引后可以只读取某个区域)。CRAM更进一步,利用参考基因组压缩:只存储与参考不同的部分,30×人类约30GB。但CRAM的缺点是解压时必须有对应的参考基因组文件。


八、速查表:格式 → 用途 → 常用工具

格式用途读写工具坐标系
FASTA参考基因组、蛋白序列库seqkit, samtools faidxN/A
FASTQ测序原始数据fastp, seqkit, cutadaptN/A
SAM/BAM比对结果samtools, picard, sambamba1-based
CRAM比对结果(高压缩)samtools, htslib1-based
VCF/BCF变异位点bcftools, GATK, vcftools1-based
GFF3基因注释(通用)gffread, AGAT, GenomeTools1-based
GTF基因注释(Ensembl/GENCODE)gffread, StringTie, STAR1-based
BED基因组区间bedtools, UCSC tools0-based
BigWig/WIG连续信号轨迹deeptools, UCSC tools, IGV0/1-based*
BEDPE配对区间/结构变异bedtools, LUMPY0-based
MAF肿瘤突变注释maftools(R), vcf2maf1-based

*注:WIG fixedStep的start是1-based,BigWig内部是0-based。


九、延伸资源

  1. SAM/BAM/CRAM/VCF/BED官方规范:https://samtools.github.io/hts-specs/
  2. GFF3规范v1.26:https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md
  3. UCSC格式说明(BED/WIG/BigWig):https://genome.ucsc.edu/FAQ/FAQformat.html
  4. Broad FLAG在线解析器:https://broadinstitute.github.io/picard/explain-flags.html
  5. seqkit文档:https://bioinf.shenwei.me/seqkit/
  6. bcftools文档:https://samtools.github.io/bcftools/bcftools.html
  7. bedtools文档:https://bedtools.readthedocs.io/
  8. deeptools文档:https://deeptools.readthedocs.io/
  9. VCF v4.5规范PDF:https://samtools.github.io/hts-specs/VCFv4.5.pdf
  10. maftools R包(肿瘤变异可视化):https://bioconductor.org/packages/maftools/

学习建议:用 head -20 文件名 实际查看一下各种格式的真实文件内容,比死记硬背字段含义有效得多。面试时能画出SAM一行或VCF一行的逐字段标注,基本就过关了。