use strict; open (INFILE, "outfilename") or die "could not open outfile"; my $line = ; my @record = split " ", $line; ELEMENT: while (defined $line) { my $element = $record[0]; my @array; push @array, [$line, $record[8]]; while (1) { $line = ; @record = split " ", $line; if ($element == $record[0]) { push @array, [$line, $record[8]]; } else { #sort using psudo-Schwartzian Transform @array = map {$_->[0]} sort {$a->[1] <=> $b->[1]} @array; print OUTFILE @array; next ELEMENT; } } }