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)
}
}