Tuesday, March 6, 2018

Code for parsing vcf files

Code to clear out vcf files to get only genotypes calls.

For example, in this vcf file we need to keep only first parameter indicating phased genotypes.

cat rs
0|0:0:1,0,0 0|1:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 1|1:2:0,0,1 1|1:2:0,0,1 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 1|1:2:0,0,1 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 1|1:2:0,0,1 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0
0|0:0:1,0,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 1|1:2:0,0,1 1|1:2:0,0,1 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 1|1:2:0,0,1 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0
0|0:0:1,0,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 1|1:2:0,0,1 1|1:2:0,0,1 0|0:0:1,0,0 0|0:0:1,0,0 1|1:2:0,0,1 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 1|1:2:0,0,1 0|1:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 1|0:1:0,1,0 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 0|1:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|0:0:1,0,0 0|1:1:0,1,0 1|0:1:0,1,0 0|1:1:0,1,0 1|0:1:0,1,0 1|0:1:0,1,0 1|0:1:0,1,0
1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|0:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 0|1:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 0|1:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|0:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 0|1:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 1|1:1.99:0,0.01,0.99 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|0:1:0,1,0 1|1:2:0,0,1 1|0:1:0,1,0 0|1:1:0,1,0 1|1:2:0,0,1 0|1:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 0|1:1:0,1,0 0|1:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 1|0:1.4:0,0.6,0.4 1|1:2:0,0,1 0|1:1:0,1,0 1|0:1:0,1,0 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|1:2:0,0,1 1|0:1:0,1,0

Using sed, we could remove : and a character class [0-9] with any number of repetitions *. However, this did not clear out decimal numbers present in some columns.

sed -E 's/:[0-9]*:[0-9]*,[0-9]*,[0-9]*//g' rs
0|0 0|1 0|0 1|0 0|1 0|0 1|0 0|1 0|0 0|0 0|0 1|1 1|1 0|0 0|0 0|0 0|0 0|1 1|0 1|0 0|0 0|0 1|0 0|0 0|0 0|1 1|0 1|1 0|0 0|0 1|0 0|0 1|0 0|1 1|0 0|0 1|0 0|0 0|0 1|0 0|0 0|1 1|0 0|1 0|0 0|0 0|1 1|0 0|0 0|0 0|0 0|0 1|1 1|0 0|1 1|0 1|0 0|0
0|0 0|1 0|0 0|0 0|1 0|0 1|0 0|1 0|0 0|0 0|0 1|1 1|1 0|0 0|0 0|0 0|0 0|1 1|0 1|0 0|0 0|0 1|0 0|0 0|0 0|1 1|0 1|1 0|0 0|0 1|0 0|0 1|0 0|1 1|0 0|0 1|0 0|0 0|0 1|0 1|0 0|1 1|0 0|1 0|0 0|0 0|1 1|0 0|0 0|0 0|0 0|0 0|1 1|0 0|1 1|0 1|0 0|0
0|0 0|1 0|0 0|0 0|0 0|0 1|0 0|1 0|0 0|0 0|0 1|1 1|1 0|0 0|0 1|1 0|0 0|1 1|0 1|0 0|0 0|0 1|0 0|1 0|0 0|1 1|0 1|1 0|1 0|0 1|0 0|0 1|0 0|1 1|0 0|0 1|0 0|0 0|0 1|0 1|0 0|1 1|0 0|1 0|0 0|0 0|1 1|0 0|0 0|0 0|0 0|0 0|1 1|0 0|1 1|0 1|0 1|0
1|1 1|1 1|1 1|1 1|1 1|0 1|1 1|1 1|1 1|1 1|1 1|1 1|1 0|1 1|1 1|1 0|1 1|1 1|1 1|1 1|1 1|1 1|0 1|1 1|1 0|1 1|1 1|1 1|1:1.99:0,0.01,0.99 1|1 1|1 1|1 1|0 1|1 1|0 0|1 1|1 0|1 1|1 1|1 0|1 0|1 1|1 1|1 1|0:1.4:0,0.6,0.4 1|1 0|1 1|0 1|1 1|1 1|1 1|1 1|1 1|1 1|1 1|1 1|1 1|0

To remove decimal points, use character class [0-9.] with any number of repetitions *.

sed -E 's/:[0-9.]*:[0-9.]*,[0-9.]*,[0-9.]*//g' rs
0|0 0|1 0|0 1|0 0|1 0|0 1|0 0|1 0|0 0|0 0|0 1|1 1|1 0|0 0|0 0|0 0|0 0|1 1|0 1|0 0|0 0|0 1|0 0|0 0|0 0|1 1|0 1|1 0|0 0|0 1|0 0|0 1|0 0|1 1|0 0|0 1|0 0|0 0|0 1|0 0|0 0|1 1|0 0|1 0|0 0|0 0|1 1|0 0|0 0|0 0|0 0|0 1|1 1|0 0|1 1|0 1|0 0|0
0|0 0|1 0|0 0|0 0|1 0|0 1|0 0|1 0|0 0|0 0|0 1|1 1|1 0|0 0|0 0|0 0|0 0|1 1|0 1|0 0|0 0|0 1|0 0|0 0|0 0|1 1|0 1|1 0|0 0|0 1|0 0|0 1|0 0|1 1|0 0|0 1|0 0|0 0|0 1|0 1|0 0|1 1|0 0|1 0|0 0|0 0|1 1|0 0|0 0|0 0|0 0|0 0|1 1|0 0|1 1|0 1|0 0|0
0|0 0|1 0|0 0|0 0|0 0|0 1|0 0|1 0|0 0|0 0|0 1|1 1|1 0|0 0|0 1|1 0|0 0|1 1|0 1|0 0|0 0|0 1|0 0|1 0|0 0|1 1|0 1|1 0|1 0|0 1|0 0|0 1|0 0|1 1|0 0|0 1|0 0|0 0|0 1|0 1|0 0|1 1|0 0|1 0|0 0|0 0|1 1|0 0|0 0|0 0|0 0|0 0|1 1|0 0|1 1|0 1|0 1|0
1|1 1|1 1|1 1|1 1|1 1|0 1|1 1|1 1|1 1|1 1|1 1|1 1|1 0|1 1|1 1|1 0|1 1|1 1|1 1|1 1|1 1|1 1|0 1|1 1|1 0|1 1|1 1|1 1|1 1|1 1|1 1|1 1|0 1|1 1|0 0|1 1|1 0|1 1|1 1|1 0|1 0|1 1|1 1|1 1|0 1|1 0|1 1|0 1|1 1|1 1|1 1|1 1|1 1|1 1|1 1|1 1|1 1|0