ID SOURCE SCORE1 SCORE2 SCORE3 ..... SCOREN 66521 SRC1 12 34 27 67 88921 SRC2 34 56 59 88 66524 SRC1 56 66 3341 SRC1 44 59 67 #### print join " ", reverse split foreach map { $_->[0] } sort { $a->[1]<=>$b->[1] || $a->[0] <=> $b->[0] } map { [ $_ , (split)[-1] ] } grep { /SRC1/ } <> ;