in reply to Re^2: Better method to cut columns from delimited file
in thread Better method to cut columns from delimited file

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".
In the absence of evidence, opinion is indistinguishable from prejudice.

The start of some sanity?