8
using namespace vcflib;
10
int main(int argc, char** argv) {
13
cerr << "usage: " << argv[0] << " <vcf file> [FIELD1] [FIELD2] ..." << endl
14
<< "outputs each record in the vcf file, removing INFO fields not listed on the command line" << endl;
18
string filename = argv[1];
20
set<string> fieldsToKeep;
21
for (int i = 2; i < argc; ++i) {
22
fieldsToKeep.insert(argv[i]);
25
VariantCallFile variantFile;
26
if (filename == "-") {
27
variantFile.open(std::cin);
29
variantFile.open(filename);
32
if (!variantFile.is_open()) {
36
Variant var(variantFile);
38
vector<string> fieldsToErase;
39
vector<string> infoIds = variantFile.infoIds();
40
for (vector<string>::iterator i = infoIds.begin(); i != infoIds.end(); ++i) {
41
if (!fieldsToKeep.count(*i)) {
42
fieldsToErase.push_back(*i);
43
variantFile.removeInfoHeaderLine(*i);
48
cout << variantFile.header << endl;
50
// print the records, filtering is done via the setting of varA's output sample names
51
while (variantFile.getNextVariant(var)) {
52
for (map<string, vector<string> >::iterator i = var.info.begin(); i != var.info.end(); ++i) {
53
if (!fieldsToKeep.count(i->first)) {
54
var.info.erase(i->first);
57
for (map<string, bool>::iterator i = var.infoFlags.begin(); i != var.infoFlags.end(); ++i) {
58
if (!fieldsToKeep.count(i->first)) {
59
var.infoFlags.erase(i->first);