use strict; use warnings; my %h; while (<>) { my ( $k, @ips ) = split /\s+/; $k =~ s/(_.*)$//; $h{$k}{$_}++ for @ips; } for my $srv ( sort keys %h ) { for ( sort keys %{ $h{$srv} } ) { printf( "%10s %15s %6s\n", $srv, $_, $h{$srv}{$_} ); } }