if I wanted to change the column name(s) I want selected on the fly, could that be fit into this one-liner equation relatively easily?
If you mean "change which columns are selected", or their ordering, that's trivial:
C:\test>perl -F"\|" -anle"print join'|', @F[ 1,3, 0,2 ]" junk.csv
AGE|ZIP|NAME|CITY
23|60001|AAA|STAT
34|12345|BBB|PPOR
11|2345|CCC|TRET
If you want to select by column name, that's a bit harder to do as a one-liner: C:\test>perl -F"\|" -anle"$n=0;if($.==1){ %names=map{$_,$n++}@F;next};
+ print join'|', @F[@names{'AGE','NAME'}]" junk.csv
23|AAA
34|BBB
11|CCC
But why would you want to do that as a one liner? (Ie. Why would you use the names rather than the column numbers directly in a one-liner?)
If you want to write a script that gets names from the command line and uses that to select columns from a file: #! perl -slw
use strict;
my @selection = delete @ARGV[ 1 .. $#ARGV ];
my $n = 0;
my @colnames = split /\|/, scalar <>;
my %colnames = map{ $_ => $n++ } @colnames;
print join '|',@colnames[ @colnames{ @selection } ];
while( <> ) {
print join '|', ( split '\|' )[ @colnames{ @selection } ];
}
__END__
C:\test>junk.pl junk.csv AGE NAME
AGE|NAME
23|AAA
34|BBB
11|CCC
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
|