func main()

in cmd/csv2cpe/csv2cpe.go [31:83]


func main() {
	acm := &AttributeColumnMap{}
	acm.AddFlags(flag.CommandLine)

	idx := flag.Int("i", 0, "column index (after erases) to insert cpe, zero means last")
	idelim := flag.String("d", ",", "input column delimiter")
	odelim := flag.String("o", "", "output column delimiter, optional")
	erase := flag.String("e", "", "comma separated list of columns to erase, optional")
	unmap := flag.Bool("x", false, "erase all columns mapped from -cpe_{field}, optional")
	lower := flag.Bool("lower", false, "force cpe output to be lower case, optional")
	defaultNA := flag.Bool("na", false, "if set, unknown CPE attributes are set to N/A, otherwise to ANY")

	flag.Parse()

	switch {
	case len(*idelim) != 1:
		fmt.Fprintln(os.Stderr, "input delimiter must be a single character")
		os.Exit(1)
	case len(*odelim) > 1:
		fmt.Fprintln(os.Stderr, "output delimiter must be a single character")
		os.Exit(1)
	case len(*odelim) == 0:
		*odelim = *idelim
	}

	var err error
	eraseCols := make(IntSet)

	if len(*erase) > 0 {
		eraseCols, err = NewIntSetFromString(strings.Split(*erase, ",")...)
		if err != nil {
			fmt.Fprintf(os.Stderr, "invalid column index passed to -e: %v", err)
		}
	}

	if *unmap {
		eraseCols.Merge(NewIntSet(acm.Columns()...))
	}

	p := &Processor{
		InputComma:        rune((*idelim)[0]),
		OutputComma:       rune((*odelim)[0]),
		CPEToLower:        *lower,
		DefaultNA:         *defaultNA,
		CPEOutputColumn:   *idx,
		EraseInputColumns: eraseCols,
	}

	err = p.Process(acm, os.Stdin, os.Stdout)
	if err != nil {
		flog.Fatalln(err)
	}
}