BAM 文件(Binary Alignment/Map file)是一种常用于存储测序数据的二进制格式。它主要用于存储 DNA测序 数据的比对(alignment)信息。以下是 BAM 文件的主要结构和组成部分:
-
文件头(Header): BAM 文件的开头包含一个文件头,其中包含有关该文件的元信息,如测序平台信息、参考基因组信息、测序参数等。文件头以
@HD
开始,后跟@SQ
(参考序列信息)、@RG
(测序样本组信息)等不同的记录类型。@HD VN:1.6 @SQ SN:chr1 LN:248956422 @SQ SN:chr2 LN:242193529 ... @RG ID:sample1 SM:sample1
-
比对数据(Alignment Data): BAM 文件的主要部分包含测序数据的比对信息。每个比对记录包括了测序 reads 的信息、比对位置、质量值等。比对记录以二进制形式存储,具体的字段和信息可以通过工具(例如
samtools view
)来查看。 -
索引(Index): 为了快速访问 BAM 文件中的数据,通常会有一个对应的索引文件(.bai)。索引文件允许根据位置快速检索 BAM 文件中的比对记录,而不必遍历整个文件。
BAM 文件采用二进制格式,因此它通常相对较小,同时能够存储大量的测序数据。由于 BAM 文件是二进制的,要查看其中的内容通常需要使用专门的工具,比如 samtools
。
在使用 BAM 文件时,常用的工具包括 samtools
、Picard
等,它们提供了各种功能,如文件格式转换、信息查询、统计分析等。
查看bam文件上的总reads可以用idxstats命令,要求 BAM 文件有一个索引文件(.bai):
samtools idxstats your_file.bam
输出将是一个包含每个参考序列的名称、长度、mapped reads 数目和unmapped reads 数目的表格。
如果只关心总 reads 数量,你可以使用 awk
命令从输出中提取相应的信息:
# only mapped
samtools idxstats your_file.bam | awk '{s+=$3} END {print s}'
# mapped + unmapped
samtools idxstats your_file.bam | awk '{s+=$3+$4} END {print s}'
{s+=$3+$4}
: 对于每一行,将第三列(mapped reads)和第四列(unmapped reads)的值相加,然后将结果累加到变量 s
中。
若想查看特定染色体区段的reads数量,如chrM:
samtools view -c -F 256 your_file.bam chrM
使用 -F 256
选项排除非主对齐的 reads(如辅助比对),然后通过指定 chrM
来统计线粒体 reads 的数量。但是我觉得也可以不用设置-F这一参数。
提取特定区段:
# 替换文件名
bam_file="your_file.bam"
# 使用 samtools view 和 grep 提取线粒体 reads 信息
samtools view -h "$bam_file" | grep -E "^@|^\S+\s[0-9]+\schrM\s" > "chrM_reads.sam"
# 使用 samtools view 和 grep 提取线粒体 reads 信息,并保存为 BAM 文件
samtools view -h "$bam_file" | grep -E "^@|^\S+\s[0-9]+\schrM\s" | samtools view -bS - > "chrM_reads.bam"