use strict; use warnings; my %seen = (); print map {sprintf qq{%-7s%2d\n}, @$_} map {[$seen{$_->[0]} ++ ? q{} : $_->[0], $_->[1]]} map {[split]} ; __END__ GEORGE 21 GEORGE 45 NICK 12 PETER 27 JIM 18 JIM 87 CHRIS 33 #### GEORGE 21 45 NICK 12 PETER 27 JIM 18 87 CHRIS 33 #### print map {sprintf qq{%-7s%2d\n}, @$_} map {[$seen{$_->[0]} ++ ? q{} : $_->[0], $_->[1]]} sort {$a->[0] cmp $b->[0]} map {[split]} ;