while (my $line = <$FILE_IN>) { my ($start, $end) = split /##/, $line; my $out_line = $start . "##" . join ";", map {$_->[0]} sort {$a->[1] <=> $b->[1]} map { my ($id, @values) = split /;/, $_; @values = map { (split /-/, $_)[0]} @values; map {[$id, $_]} @values;} split /@/, $end; }