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