#!/tools/bin/perl use strict; use warnings; use Data::Dumper; open DATA, "file1" or die $!; my %recordsArray; my $header = ; #capture the header line my @headers = split(/\t+/,$header); while(my $line = ){ chomp($line); my @records = split(/\t+/,$line); # print "@records"; my $score = $records[2]; my $value = $records[3]; $recordsArray{$score}{$value} = $line; } print $header,"\n"; foreach my $score (reverse sort keys %recordsArray){ foreach my $value (reverse sort keys %{$recordsArray{$score}}){ print $recordsArray{$score}{$value},"\n"; } } ----DATA was modified for ids having same values----- 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.70 372 69 13 185 200 --------Result-------------------- ID distance score value start stop done remaining N_542 1290 18.74 542 53 15 237 251 N_425 614 17.01 425 40 12 308 322 N_236 814 15.70 372 69 13 185 200 N_372 870 15.66 372 80 15 262 276