How do I remove rows in a VCF file on 1kGenome column, where Match=EXACT using bash ?
2 Answers
$\begingroup$
$\endgroup$
You can filter records in Python for example using pyvcf.VcfFrame.filter_flagany()
method I wrote:
>>> from fuc import pyvcf
>>> data = {
... 'CHROM': ['chr1', 'chr1', 'chr1', 'chr1'],
... 'POS': [100, 101, 102, 103],
... 'ID': ['.', '.', '.', '.'],
... 'REF': ['G', 'T', 'A', 'C'],
... 'ALT': ['A', 'C', 'T', 'A'],
... 'QUAL': ['.', '.', '.', '.'],
... 'FILTER': ['.', '.', '.', '.'],
... 'INFO': ['DB', 'DB;H2;Match=EXACT', 'DB;H2;Match=EXACT', '.'],
... 'FORMAT': ['GT', 'GT', 'GT', 'GT'],
... 'Steven': ['0/0', '0/1', '0/1', '0/0'],
... }
>>> vf = pyvcf.VcfFrame.from_dict([], data)
>>> # vf = pyvcf.VcfFrame.from_file('your_vcf.vcf')
>>> vf.df
CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Steven
0 chr1 100 . G A . . DB GT 0/0
1 chr1 101 . T C . . DB;H2;Match=EXACT GT 0/1
2 chr1 102 . A T . . DB;H2;Match=EXACT GT 0/1
3 chr1 103 . C A . . . GT 0/0
>>> vf.filter_flagany(['Match=EXACT'], opposite=True).df
CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Steven
0 chr1 100 . G A . . DB GT 0/0
1 chr1 103 . C A . . . GT 0/0
>>> # vf.to_file('filtered.vcf')
$\begingroup$
$\endgroup$
0
Hard to say without seeing VCF rows, but generally speaking with text files you can use grep
, if I understand the question:
grep -vw "Match=EXACT" file.vcf > filtered.vcf