做群體變異檢測后,通常會有提取子集的操作,之前沒有發現bcftools有這個功能,都是自己寫腳本操作,數據量一上來,速度真的是讓人無語凝噎。這里記錄下提取子vcf文件的用法,軟件版本:bcftools-1.5
一、根據個體提取子集
根據樣品名提取vcf文件,准備要保留的個體名文件 keep.list,一行一個個體(參考第三步)。
無痛處理,速度超快,命令如下:
1 bcftools view -S keep.list test.vcf >sub_indv.vcf
二、根據染色體位置提取子集
注意:這里vcf要使用gbzip壓縮並且構建索引才行,而且vcf文件位置順序不能亂(別問我怎么知道的😔);
准備好染色體及位置文件chr_pos.list,文件內容示例如下:
chr1 27639 chr1 60383 chr2 60469 chr3 60516 chr4 60534
#或者直接給區間也行
chr1 1 1000
chr1 2000 4500
后續命令如下,速度快,內存消耗還小:
1 bgzip test.vcf 2 tabix -p vcf test.vcf.gz 3 bcftools view -R chr_pos.list test.vcf.gz >new.pos.vcf
三、直接提取測序個體樣品名
1 bcftools query -l test.vcf >ind.list
1 head -100 test.vcf |grep "#C"|cut -f10-|xargs -n 1 >ind.list # 不調用軟件這樣也行
ind.list文件中一行一個樣品名