Hi Frank!
> for ipadresse in `cat scan_ip`
> do
> grep $ipadresse ref_ip
> if [ $? != 0 ] then
> echo $i >> diff_ip
> fi
> done
>
> - das ist nicht getestet!!! -
>
> in einem buch las ich von einem vergleich, bei dem perl bei
> zeichenkettenvergleich am besten weil am schnellsten abgeschnitten
> haette. wie koennte eine loesung in perl aussehen?
Der Knackpunkt ist, da� die Anzahl der Prozesse, die im Rahmen eines solchen
Shellscripts gestartet werden, ein mehrfaches der gelesenen Zeilen ist. Nimm
mal eine Datei mit 100.000 Zeilen, zwei-drei Prozesse (grep, echo usw.) pro
Zeile und eine hundertstel Sekunde, die f�rs Starten eines Kindproze�
gebraucht wird, und die Zeit, die der Kindproze� (grep!!!) selbst wieder
braucht. Perl rammt bei solchen Sachen die Shell unangespitzt in den Boden,
egal wie schlecht das Perlscript grade mal optimiert ist.
#!/usr/bin/perl -w
use strict or die;
my $scanfile = "scan_ip";
my $reffile = "ref_ip";
my $diffile = "diff_ip";
my %ref_ips;
open my $ref, "<$reffile" or die;
while (<$ref>){
chomp;
$ref_ips{$_} = $_;
}
close $ref;
open my $scan, "<$scanfile" or die;
open my $diff, ">$diffile" or die;
while (<$scan>){
chomp;
# Voraussetzung: Zeile ist IP-Adresse.
# Sonst mit einer Regex rausfischen.
next if ($ref_ips{$_}};
print $diff "$_\n";
}
close $diff;
close $scan;
exit 0;
Oder so �hnlich. Kommt auf den Einzelfall und Dateiformat- und -gr��e an.
-martin
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org