在研究基因序列层面变化的时候,对基因组序列有一个全面的认知及学会怎么对序列基本操作十分重要。
参考基因组是以 .fa 结尾的 FASTA 格式文件。以 human 基因组为例。

在参考基因组中,每一个染色体第一行都是以 “>” 开头的描述序列的头部行(header line),数据库的不同,这里的信息可能略有不同。
>***:表示这是FASTA格式的头部行。每个序列在FASTA文件中都以这种符号开头的行来描述其信息。1***:通常表示序列的标识符(ID)。在这种情况下,可能指的是染色体1。dna:chromosome***:指示序列的类型,这里表示该序列是一个染色体的DNA序列。chromosome:GRCh38:1:1:248956422:1***:这是一个详细的描述,包含多个信息:chromosome***:指示这是一个染色体。GRCh38***:表示使用的是人类基因组的GRCh38版本(Genome Reference Consortium Human Build 38)。1***:指染色体1。1:248956422***:表示序列的范围,从位置1到248,956,422,这是染色体1的全长。1***:可能是指序列的方向或版本信息。REF***:通常表示这是参考序列(Reference Sequence),用于参考基因组的标准序列。第一行以后就是这个染色体的序列了,每行有固定的字符数。可以从头部行看到这个染色体有248956422 个碱基。
在参考基因组序列中,除了常见的碱基符号A、T、C、G(分别代表腺嘌呤、胸腺嘧啶、胞嘧啶和鸟嘌呤)之外,还可能出现其他符号。这些符号用于表示不确定性或变异。
N:表示未知碱基。通常用于未测序或不确定的区域。
$ grep -v "^>" Homo_sapiens.GRCh38.dna.chromosome.1.fa | tr -d '\n' | fold -w1 | sort | uniq -c
67070277 A
48055043 C
48111528 G
18475410 N
67244164 T
可以看到有 18475410 个碱基都是没有被测定的, 在1号染色体中占比 7.4% 左右。

可以看到 1 号染色体序列的最后一行是两个 N字符,接着就是 10 号染色体。
因为是按照字符排序的,"1"、"10"、"11"、"2"这样的顺序,所以1 号染色体后就是10 号染色体。
参考基因组注释文件提供了关于基因组序列的详细信息,包括基因的位置、功能、转录本、外显子、内含子等。常见的基因组注释文件格式包括GFF(General Feature Format)、GTF(Gene Transfer Format)和BED(Browser Extensible Data)格式。
这里以human gtf文件为例。

GTF文件由9个字段组成,每个字段用制表符分隔:
chr1、chrX*)或其他序列标识符。HAVANA、ENSEMBL*)。gene、transcript、exon、CDS*)。.*表示无评分。+表示正链,-*表示负链。0、1、2或.*表示不适用。gene_id "GENE_ID"; transcript_id "TRANSCRIPT_ID";*。可以看到第三列为基因组特征。
$ awk '{print $3}' *gtf | sort | uniq
CDS
Selenocysteine
exon
five_prime_utr
gene
start_codon
stop_codon
three_prime_utr
transcript
举例
chr1 example gene 1000 5000 . + . gene_id "gene1";
chr1 example transcript 1000 5000 . + . gene_id "gene1"; transcript_id "transcript1";
chr1 example exon 1000 1200 . + . gene_id "gene1"; transcript_id "transcript1";
chr1 example exon 1500 1700 . + . gene_id "gene1"; transcript_id "transcript1";
chr1 example exon 2000 2400 . + . gene_id "gene1"; transcript_id "transcript1";
chr1 example five_prime_utr 1000 1099 . + . gene_id "gene1"; transcript_id "transcript1";
chr1 example CDS 1100 1200 . + 0 gene_id "gene1"; transcript_id "transcript1";
chr1 example CDS 1500 1700 . + 2 gene_id "gene1"; transcript_id "transcript1";
chr1 example CDS 2000 2300 . + 0 gene_id "gene1"; transcript_id "transcript1";
chr1 example three_prime_utr 2301 2400 . + . gene_id "gene1"; transcript_id "transcript1";
chr1 example gene 1000 5000 . + . gene_id "gene1";chr1 example transcript 1000 5000 . + . gene_id "gene1"; transcript_id "transcript1";1000-12001500-17002000-2400chr1 example five_prime_utr 1000 1099 . + . gene_id "gene1"; transcript_id "transcript1";1100-12001500-17002000-2300chr1 example three_prime_utr 2301 2400 . + . gene_id "gene1"; transcript_id "transcript1";可以明白,这种基于起始位置和终止位置的注释文件,如果参考基因组的版本更迭,将不再准确,最方便的方法是下载最新的版本,但如果你有特殊的需求,也可以进行“坐标转换”,有网页和工具能实现这个功能。
参考基因组索引被称为基因组目录,为 FAI 格式文件,通常由 samtools faidx 命令生成。FAI 文件用于快速访问大型 FASTA 文件中的特定序列。它的每一行对应于 FASTA 文件中的一个序列,包含以下列信息:
> 后的部分)。对于偏移量,这里举例说明:
假设有一个 FASTA 文件 *example.fasta*,内容如下:
>chr1
AGCTTAGCTA
GCTAGCTAGC
>chr2
CGTAGCTAGC
TAGCTAGCTA
CCT
使用 samtools faidx 创建的索引文件 fasta.fai 可能会是这样的:
chr1 20 6 10 11
chr2 23 34 10 11
> 和 chr1 占用 5 个字节。chr1* 的序列数据开始于第 6 个字节。chr1 的序列数据占用 20 个字节(两行,每行 10 个字符)。>chr2 占用 5 个字节。chr2* 的序列数据开始于第 34 个字节(6 + 20 + 2 + 6 = 34)。这里强烈推荐SeqKit工具。
$ seqkit stat Homo_sapiens.GRCh38.dna.primary_assembly.fa
file format type num_seqs sum_len min_len avg_len max_len
Homo_sapiens.GRCh38.dna.primary_assembly.fa FASTA DNA 194 3,099,750,718 970 15,978,096.5 248,956,422
# Ensemble GRCh38 为例,统计染色体数。(结果为22+X+Y+MT=25
$ cat *.fa | grep ">*chromosome*" | wc -l
25
可通过samtools faidx命令获取每个染色体的长度。
samtools faidx *.fa
cat *.fa.fai
$ cat *.gtf | grep -v "#" | cut -f3 | sort | uniq -c
899302 CDS
130 Selenocysteine
1668828 exon
175449 five_prime_utr
63140 gene
98967 start_codon
92935 stop_codon
211674 three_prime_utr
254129 transcript
# 提取整个染色体序列
samtools faidx Homo_sapiens.GRCh38.dna.primary_assembly.fa 1 > chr1.fa
# 提取染色体1上1000-2000的位置
samtools faidx Homo_sapiens.GRCh38.dna.primary_assembly.fa 1:1000-2000 > sequence.fa
这里我们先有一个bed 格式文件命名为 foo.bed
1 2581559 2584533 gene
1 2581559 2584533 transcript
1 2581559 2581650 exon
1 2583369 2583495 exon
1 2584124 2584533 exon
bedtools getfasta -fi Homo_sapiens.GRCh38.dna.primary_assembly.fa -bed foo.bed -fo output.fa
bio 是一个非常优秀的软件,在获取基因的序列等方面极大的简化了步骤,这里演示一下获取fa数据的能力。
$ bio fetch NC_045512 --format fasta | head -3
>NC_045512.2 Severe acute respiratory syndrome coronavirus 2 isolate Wuhan-Hu-1, complete genome
ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAA
CGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAAC
$ bio fetch NC_045512 --format gff | head -7
##gff-version 3
#!gff-spec-version 1.21
#!processor NCBI annotwriter
##sequence-region NC_045512.2 1 29903
##species https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=2697049
NC_045512.2 RefSeq region 1 29903 . + . ID=NC_045512.2:1..29903;Dbxref=taxon:2697049;collection-date=Dec-2019;country=China;gb-acronym=SARS-CoV-2;gbkey=Src;genome=genomic;isolate=Wuhan-Hu-1;mol_type=genomic RNA;nat-host=Homo sapiens;old-name=Wuhan seafood market pneumonia virus
NC_045512.2 RefSeq five_prime_UTR 1 265 . + . ID=id-NC_045512.2:1..265;gbkey=5'UTR
# 获取cdna数据
bio fetch ENST00000288602 --type cdna
# 获取cds数据
bio fetch ENST00000288602 --type cds
# 获取蛋白数据
bio fetch ENST00000288602 --type protein