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