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