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; } #### use Sort::Natural qw( natsort ); my %data; while ( <$fh> ) { chomp; my ( $ip, @hosts ) = split; ++$data{ $ip }{ $_ } for @hosts; } for my $ip ( natsort keys( %data ) ) { my @hosts = natsort keys %{ $data{ $ip } }; say join "\t", $ip, @hosts; }