我正在尋找一個標準VCF文件的子集,以生成僅包含插入內容(即不包含indel)的文件。
我可以使用以下方法來解決問題:
bcftools視圖-v indels <vcf> | awk'{if(length($(4)== 1)print}'
但是,這不會捕獲具有插入和刪除功能的多等位基因記錄一部分的插入,參考長度將大於1 bp。可能的話,走一串路是分解,規範化,然後使用相同的參考長度過濾鏈-當然,在許多VCF操作工具中,有一種更好的方法嗎?
我正在尋找一個標準VCF文件的子集,以生成僅包含插入內容(即不包含indel)的文件。
我可以使用以下方法來解決問題:
bcftools視圖-v indels <vcf> | awk'{if(length($(4)== 1)print}'
但是,這不會捕獲具有插入和刪除功能的多等位基因記錄一部分的插入,參考長度將大於1 bp。可能的話,走一串路是分解,規範化,然後使用相同的參考長度過濾鏈-當然,在許多VCF操作工具中,有一種更好的方法嗎?
單線:
zcat my.vcf.gz | perl -ane'$ x = 0; for $ y(split(“,”,$ F [4])){$ x = 1 if length($ y)>length($ F [3])}打印// ^ #/ || $ x'
或等效地
zcat my.vcf.gz | perl -ane'$ x = 0; map {$ x = 1 if length>length($ F [3])} split(“,”,$ F [4]);如果/ ^#/ || $ x'
對於簡單的VCF操作,通常建議編寫腳本。這可能比使用繁重的庫的速度更快。使用腳本,您只需解析您關心的字段;大多數庫不必要地解析每個字段。
在相關說明中,除非必要,我建議不分解多等位基因位點。分解非常棘手,使VCF難以解析和理解,並且可能是錯誤的潛在來源。這是一個示例:
#CHROM POS ID參考ALT質量過濾器信息格式S1 S2 S3 S411 101。 GCGT G,GCGA,GTGA,CCGT 199通過。 GT 0/1 1/2 2/3 2/4
vt分解+歸一化會產生以下VCF:
#CHROM POS ID REF ALT QUAL過濾器信息格式S1 S2 S3 S411 101。 GCGT G 199通過。 GT 0/1 1 /。 ./。 ./.11 101。 G C 199通過。 GT 0 /。 ./。 ./。 ./111 102。 CGT TGA 199通過。 GT 0 /。 ./。 ./1 ./.11 104。 T 199通過。 GT 0 /。 ./1 1 /。 1 /.
從理論上講,您可以從此輸出中重建原始VCF。但是,程序要做到這一點非常具有挑戰性。當您逐行計算等位基因頻率時,該VCF會給您錯誤的結果。 bcftools規範-m-
替換“。”與“ 0”。您可以從bcftools輸出中獲得正確的ALT等位基因頻率,但可以得到錯誤的REF等位基因頻率。此外,vt也是不完善的,因為不會分解“ CGT => TGA”。
我的首選輸出是:
#CHROM POS ID參考ALT質量過濾器信息格式S1 S2 S3 S411 101。 GCGT G,<M> 0。 。 GT 0/1 1/2 2/2 2/211 101 G C,<M> 0。 。 GT 0/2 2/0 0/0 0/111 102。 C T,<M> 0。 。 GT 0/2 2/0 0/1 0/011 104。 T A,<M> 0。 。 GT 0/2 2/1 1/1 1/0
在這裡,我們使用符號等位基因 <M>
來表示“另一個ALT等位基因”。您可以通過查看一行來計算等位基因頻率,而不會將其他ALT等位基因與REF混淆。 bgt可以間接產生這種VCF。但是,它會丟棄所有INFO,因此也不是一個可行的解決方案。
總而言之,分解多等位基因位點非常困難。當您分解錯誤時,您的下游分析可能不准確。分解時應謹慎使用。
一種方法是分解多等位基因記錄,以便使用 vt或類似方法將它們表示為一個等位基因,一個記錄:
bcftools視圖-v indels <vcf> | vt分解-| bcftools視圖-H | awk'{if(length($ 5)>length($ 4))print}'
一些分解的等位基因將帶有多餘的參考填充。要左移並修剪它們,請添加一個 normalize
步驟(將這些匹配回輸入VCF的NB變得很簡單):
bcftools視圖-v indels <vcf> | vt分解-| vt normalize -r <reference.fasta-| awk'{if(length($ 4)== 1)print}'
編輯:正如gringer所說,這也可以不用vt來完成:
bcftools視圖-Ou -v indels <vcf> | bcftools規範-Ou -Nm-| bcftools視圖-H | awk'{if(length($ 5)>length($ 4))print}'
要包括複雜等位基因,請使用 view -V snps
(!snvs)而不是 -v indels
僅強調所有步驟都可以在bcftools功能內完成,並且由於我不能僅評論@blmoore的答案:
bcftools視圖--types indel <vcf> | bcftools規範-m-| bcftools過濾器--include'strlen(REF)<strlen(ALT)'| bcftools視圖-H
“ bcftools過濾器”的更多內置功能此處
使用 vcffilterjs
。
java -jar dist / vcffilterjs.jar -e'function accept(vc){var a = vc.getAlleles(); var lenRef = a.get(0).length(); for(i = 1; i<a.size(); ++ i){var alt = a.get(i); if(alt.isSymbolic())Continue; var lenAlt = alt.length(); if(lenRef<lenAlt)返回true;返回false; } accept(variant);' input.vcf
。
如果要執行設置操作,則可以使用 vcf2bed
:
$ vcf2bed --insertions < in.vcf > out.bed
基於VCF v4.2規範,-snvs
,-插入
和- -deletions
是可用於過濾輸入的選項。在每種情況下,參考等位基因和其他等位基因的長度都用於確定所處理的變異類型。