如何解决samtools索引时的‘染色体块不连续’错误?
解决samtools索引失败的问题
错误原因
你遇到的Chromosome blocks not continuous错误,本质是待索引的BAM文件没有按参考染色体名称和位置排序。samtools的.bai索引要求BAM数据必须有序:先按参考序列(比如NC_000001.11)分组,再按每个序列上的起始位置从小到大排列。你直接合并多个未排序的BAM文件,导致reads在染色体间乱序,索引程序无法识别连续的染色体块,因此报错。
快速修复步骤
1. 对合并后的BAM进行排序
执行以下命令生成排序后的BAM文件(-@指定线程数,可根据你的MacBook Air配置调整为2或4):
samtools sort -@ 4 -o HFFmerged_sorted.bam HFFmerged.bam
2. 对排序后的BAM建立索引
排序完成后,再运行索引命令即可成功:
samtools index HFFmerged_sorted.bam
优化后续分析流程(避免再踩坑)
为了提高效率,建议在流程早期就对BAM排序,而非等合并后再处理:
1. SAM转BAM时直接排序
将每个比对生成的SAM文件直接转为排序后的BAM:
for sam_file in /Volumes/Untitled/IPStrimmed/IPSsam/*.sam; do bam_output=$(basename "$sam_file" .sam)_sorted.bam samtools sort -@ 4 -o "/Volumes/Untitled/IPStrimmed/IPSbam/$bam_output" "$sam_file" done
2. 合并排序后的BAM文件
直接合并多个已排序的BAM,合并后的文件依然保持有序:
samtools merge -@ 4 -o HFFmerged_sorted.bam /Volumes/Untitled/IPStrimmed/IPSbam/*_sorted.bam
3. 直接建立索引
此时合并后的有序BAM可以直接执行索引操作:
samtools index HFFmerged_sorted.bam
内容的提问来源于stack exchange,提问作者Rafail Adam
相关产品推荐
相关产品推荐

