为什么 BAM 文件 sort 之后体积会变小

测序数据比对结果 BAM 文件用 samtools 进行 sort 之后发现体积变小了...
当时怀疑是不是 sort 过程中有一部分 reads 被丢弃了?于是统计了一下原始 BAM 文件和 sort 之后 BAM 文件的行数,发现是一样的,也就是说 samtools 在 sort 时并没有去除一部分 reads:

$ samtools view -h F_bismark_bt2_pe.bam | wc -l
46159701
$ samtools view -h F_bismark_bt2_pe.sorted.bam | wc -l
46159701

那为何只对文件中内容排一下序,文件就变小了呢?上网搜索一番,用中文关键字竟然找不到有用的信息,看来技术类问题用英文关键字搜才有效率,在 SEQanswers 上找到一篇讨论这个话题的帖子,samtools 作者 Li Heng 给出了解释:

BAM is compressed. Sorting helps to give a better compression ratio because similar sequences are grouped together.

BAM 文件是压缩的二进制文件,对文件内容排序之后相似的内容排在一起,使得文件压缩比提高了,因此排序之后的 BAM 文件变小了,相对应的 SAM 文件就是纯文本文件,对 SAM 文件进行排序就不会改变文件大小。由于 RNA-seq 中基因表达量的关系,RNA-seq 的数据比对结果 BAM 文件使用 samtools 进行 sort 之后文件压缩比例变化会比 DNA-seq 更甚。

另外,samtools 对 BAM 文件进行排序之后那些没有比对上的 reads 会被放在文件的末尾。

samtools view file.bam | tail

关于 SEQanswers

介绍一下这个有很多大牛出没的 NGS 技术论坛 SEQanswers,其中包含各类与测序技术和生物信息相关的技术讨论,大牛很多,干货很多,对新手来说是个很好的学习资源。


如果我们过于爽快地承认失败,就可能使自己发觉不了我们非常接近于正确。 ——卡尔·波普尔

推荐阅读更多精彩内容