#!/usr/bin/env perl # # $Id$ use strict; use warnings; use Getopt::Std; use Text::CSV; my %opt; getopts( 'hp:r:t:', \%opt ); HELP_MESSAGE() if $opt{h}; my $sep = $opt{t} // ','; sub HELP_MESSAGE { print STDERR <new( { quote_space => 0, sep_char => $sep, eol => $/ } ) or puke('CSV reader/writer creation failed'); # not quite correct: we should take all settings from $dbh, e.g. encoding my $header = $csvh->getline(*ARGV) or die "fatal error: no input\n"; my @r_header = defined( $opt{r} ) ? ( map { eval $opt{r}; $_ } @$header ) : @$header; my @matches = map { (!defined( $opt{p} ) || eval $opt{p}) + 0 } @r_header; my @cols_to_print = grep { $matches[$_] } 0 .. $#r_header; $csvh->print( *STDOUT, [ map { $r_header[$_] } @cols_to_print ] ); while ( my $r = $csvh->getline(*ARGV) ) { $csvh->print( *STDOUT, [ map { $r->[$_] } @cols_to_print ] ); }