in reply to Re: looping through an array
in thread looping through an array
The following is probably faster (especially for large amounts of data), and it sorts the ports numerically. Your solution oddly sorted them alphabetically.
sub sort_by_ip { return map { substr($_, 4) } sort map { pack("C4a*", split(/\./), $_) } @_; } my %data; while (<DATA>) { chomp; my ($src, $dest, $dst_port) = (split)[5,9,10]; $data{$src}{$dest}{$dst_port}++; } foreach my $src (sort_by_ip keys %data ) { foreach my $dest (sort_by_ip keys %{$data{$src}} ) { foreach my $dst_port (sort { $a <=> $b } keys %{$data{$src}{$dest}}) { print "$src $dest $dst_port $data{$src}{$dest}{$dst_port}\n"; }}}
|
|---|