vcfから周辺配列の取得

VCFファイルから周辺配列(flanking sequence)を取得したいとき、様々な方法が考えられると思います。今回はその中で bedtools を用いた方法を考えていきたいと思います。

bedtools flank というコマンドが周辺配列をとってくる際に用いるコマンドですが、このコマンドはリファレンスの配列ごとの塩基長が記されたファイルを必要とします。このファイルは以下のサイトを参考に以下のコマンドで作成することができます。

https://www.danielecook.com/generate-fasta-sequence-lengths/

cat file.fa | awk '$0 ~ ">" {if (NR > 1) {print c;} c=0;printf substr($0,2,100) "\t"; } $0 !~ ">" {c+=length($0);} END { print c; }' > my.genome

また、今回はSNP情報が記載されたVCFファイルをスタートに進めていこうと思います。そこで最初にVCFをBED形式に変換してあげます。今回は bcftools query を用いました。コマンドは以下のようになります。

bcftools query -f'%CHROM\t%POS0\t%END\t%ID%REF\n' variant.vcf >variant.bed

そしてBEDファイルができたら早速 bedtools flank で周辺配列の座標情報を取得しBEDファイルに出力します。

bedtools flank  -i variant.bed -g my.genome -b 100 > flank.bed

奇数行と偶数行に分けることでSNPの左側の情報と右側の情報とに分けます。

awk 'NR%2!=0' flank.bed > left.bed
awk 'NR%2==0' flank.bed > right.bed

最後に bedtools getfasta で配列情報を出力させて完成です。

bedtools getfasta -fi genome.fa -bed left.bed
bedtools getfasta -fi genome.fa -bed right.bed