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
####
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
####
#! 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