Jennifer Garner wrote:
> hi,lists,
Hello,
> I have a file which is so large,which looking as:
>
> 61.156.49.18:28360
> 61.183.148.130:27433
> 222.90.207.251:25700
> 202.117.64.161:25054
> 218.58.59.73:24866
> 221.233.24.9:22507
> 222.187.124.4:21016
> ...
>
> and more than 45000000 lines.
>
> the part after ":" is no use for me,I only need the IP.
>
> for each IP,such as '218.58.59.73', I want to get this result:
>
> 218.58.59. xxx yyy xxx+yyy
>
> I want to know how many IP are in the range of '218.58.59.1' to '
> 218.58.59.127',this is 'xxx';
> and how many IP are in the range of '218.58.59.128' to '218.58.59.254',this
> is 'yyy'.
>
> I write this code:
> open (FILE,$file) or die "$!";
> while(<FILE>)
> {
> next if /unknown/o;
> next if /^192\.168\./o;
> chomp;
> my ($ip,$num) = split/:/,$_;
> if ($ip = ~ /^(\d+\.\d+\.\d+\.)(\d+)/o){
> my ($net,$bit) = ($1,$2);
> $total{$net}{low}{$bit} = 1 if $bit < 128;
> $total{$net}{high}{$bit} = 1 if $bit >=128 and $bit <
> 255;
> $total{$net}{total}{$bit} = 1;
> }
> }
> close FILE;
>
> foreach (sort { scalar keys %{$total{$b}{total}} <=> scalar keys
> %{$total{$a}{total}} } keys %total)
> {
> print RESULT "$_","\t",scalar keys %{$total{$_}{low}},"\t",
> scalar keys %{$total{$_}{high}},"\t",scalar keys
> %{$total{$_}{total}},"\n";
> }
>
>
> but it's too slow for me to wait the result.How can I get it more effective
> and run less time?thanks.
This is quite a bit faster then your version:
open FILE, '<', $file or die "Cannot open '$file' $!";
my ( %low, %high, %total );
while ( <FILE> ) {
next if /unknown/;
next if /^192\.168\./;
next unless /^(\d+\.\d+\.\d+\.)(\d+)/;
if ( $2 < 128 ) {
$low{ $1 }++;
}
else {
$high{ $1 }++;
}
$total{ $1 }++;
}
close FILE;
for ( sort { $total{ $b } <=> $total{ $a } } keys %total ) {
print RESULT "$_\t", $low{ $_ } || 0, "\t", $high{ $_ } || 0, "\t",
$total{ $_ }, "\n";
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>