use List::Util qw( uniq ); use Sort::Natural qw( natsort ); my %data; while ( <$fh> ) { chomp; my ( $ip, @hosts ) = split; push @{ $data{ $ip } }, @hosts; } for my $ip ( natsort keys( %data ) ) { my @hosts = natsort uniq @{ $data{ $ip } }; say join "\t", $ip, @hosts; }