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

Antwort per Email an