修改 bam 檔案中染色體名

Billymeme發表於2020-10-09

問題描述

在分析的過程中,有些資料的染色體命名為“chr1、chr2、…、chrX、chrY”,而有些資料的染色體命名則為“1、2、…、X、Y” (也就是不包含 chr 字元)。這裡,通過程式碼對 bam 檔案作為修改,實現染色體名的統一。

程式碼實現

假設我們有一個名為 test.bam 的檔案,其中染色體名不包含chr字元,需要在染色體名前加上chr字元。

通過 samtoolsshell 實現 (注:samtools reheader 需要給一個- 的引數,不給會報錯):

samtools view -H test.bam | sed -e 's/SN:\([0-9XY]\)/SN:chr\1/' -e 's/SN:MT/SN:chrM/' | samtools reheader - test.bam > test.CHR.bam

程式碼封裝

因為會經常碰到這樣的情況,因此就將上面的這段程式碼封裝到一個名為 bam_add_chr.sh 的指令碼,放在 bin 目錄下面,方便呼叫。

#! /usr/bin/bash

samtools view -H $1 | sed -e 's/SN:\([0-9XY]\)/SN:chr\1/' -e 's/SN:MT/SN:chrM/' | samtools reheader - $1 > $2

echo "Finished!"

呼叫方法:

bam_add_chr.sh test.bam test.CHR.bam

其它方法

可以通過 Python 的 Pysam 模組進行修改,但計算速度相對更低。

相關文章