Here's something to get you started. Hopefully you can find this helpful.
#!/usr/bin/perl
use strict;
my @required_cols = qw( colname1 colname3 colname4 );
my %record;
while (<DATA>) {
my (@temp_data) = split( /\s+/ );
push( @{ $record{$_} }, $temp_data[$_] )
for (0 .. $#temp_data);
}
my (%final_data, $count);
for my $i ( keys %record ) {
$count = 0;
for my $j ( @{ $record{$i} } ) {
push( @{ $final_data{$count} }, $j )
if ( grep /\b$record{$i}->[0]\b/, @required_cols );
$count++;
}
}
print "@{ $final_data{$_} }\n" for ( sort keys %final_data );
__DATA__
colname1 colname2 colname3
val1 val2 val3
val11 val21 val31
val12 val22 val32