use strict; use warnings; use Data::Dumper; my $header = ; #capture the header line my @headers = split(/\t+/,$header); my @recordsArray; while(my $line = ){ my @records = split(/\t+/,$line); # print "@records"; push @recordsArray,[@records]; } #print Dumper(\@recordsArray); my @SortedArray = sort {$b->[3]<=>$a->[3] or $b->[2]<=>$a->[2]} @recordsArray; print Dumper(\@SortedArray); __DATA__ ID distance score value start stop done remaining N_425 614 17.01 425 40 12 308 322 N_542 1290 18.74 542 53 15 237 251 N_372 870 15.66 372 80 15 262 276 N_236 814 15.65 236 69 13 185 200