You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.2 KiB
65 lines
1.2 KiB
#!/usr/bin/perl -w |
|
|
|
use strict; |
|
|
|
sub loadFile { |
|
my ($file) = @_; |
|
my %ret; |
|
my $max = 0; |
|
open FILE,$file; |
|
while (<FILE>) { |
|
my ($addr,$p2h,$p8h,$p1d,$p1w,$p1m) = split(/\s+/,$_); |
|
if ($p1m =~ /\A([1-9.]+)%\Z/) { |
|
my $x = $1*0.01; |
|
$max=$x if ($x > $max); |
|
$ret{$addr} = $x; |
|
} |
|
} |
|
for my $k (keys %ret) { |
|
$ret{$k} /= $max; |
|
} |
|
close FILE; |
|
return \%ret; |
|
} |
|
|
|
sub merge { |
|
my ($a,$b) = @_; |
|
return 1-(1-$a)*(1-$b); |
|
} |
|
|
|
sub combine { |
|
my ($f1,$f2) = @_; |
|
my %ret; |
|
for my $k1 (keys %{$f1}) { |
|
if (defined $f2->{$k1}) { |
|
$ret{$k1} = merge($f1->{$k1}, $f2->{$k1}); |
|
} else { |
|
$ret{$k1} = merge($f1->{$k1}, 0); |
|
} |
|
} |
|
for my $k2 (keys %{$f2}) { |
|
if (!defined $f1->{$k2}) { |
|
$ret{$k2} = merge(0, $f2->{$k2}); |
|
} |
|
} |
|
return \%ret; |
|
} |
|
|
|
my $res; |
|
my $n=0; |
|
for my $file (@ARGV) { |
|
my $r = loadFile($file); |
|
if ($res) { |
|
$res = combine($res,$r); |
|
} else { |
|
$res = $r; |
|
} |
|
$n++; |
|
} |
|
|
|
for my $addr (sort { $res->{$b} <=> $res->{$a} } (keys %{$res})) { |
|
if ($addr =~ /\A(\d+)\.(\d+)\.(\d+)\.(\d+):8333/) { |
|
my $a = $1*0x1000000 + $2*0x10000 + $3*0x100 + $4; |
|
printf "0x%08x %s %g%%\n",$a,$addr,(1-((1-$res->{$addr}) ** (1/$n)))*100; |
|
} |
|
}
|
|
|