Thread Tie::File ist langsam
(9 answers)
Opened by rasch at 2009-07-15 14:15
Hallo Community,
zuerst muss ich mich fuer mein Deutsch entschuldigen, weil ich nicht aus einem deutschsprachigen Land komme. Hoffentlich beschreibe ich meine Frage verstaendlich. Also, auf einem meiner Computer laeuft (unter FreeBSD) ein syslog daemon, der aus einem CISCO Box seine Messages sammelt. Dafuer wird eine Datei '/var/log/cisco.log' gebildet. Der Cisco Box hat zurzeit eine Panne (ich warte auf den Ersatzteil) und in die Datei cisco.log wird eine lange Zeile mit so etwas wie 'Fan 2 not rotating' verzeichnet und das passiert 2mal in einer Minute und die Datei wird langsam groesser und groesser. Ich wolte einfach jede Zeile mit 'Fan 2 not rotating' ausloeschen. Ich habe Perl eingesetzt und zwar 2 Wege. Den ersten Weg via Tie::File Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/local/bin/perl -w use strict; use Tie::File; use Fcntl 'O_RDWR'; #my $file = q(/var/log/cisco.log); my $file = q(cisco.log); tie my @array, 'Tie::File', $file, mode=>O_RDWR; for my $i (reverse 0.. $#array){ splice(@array,$i,1) if($array[$i]=~/Fan 2 not rotating/); } untie @array; Und den zweiten Weg via open und print Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 #!/usr/local/bin/perl -w use strict; open(IN,'cisco.log') or die "$!\n"; open(OUT,'>temp.log') or die "$!\n"; while(my $line=<IN>){ if($line!~/Fan 2 not rotating/){ print OUT $line; } } system("mv temp.log cisco.log"); Also jetzrt endlich die Frage. Warum dauert der Script vie Tie::File so lange (cca 90 Sekunden, Datei hat cca 2800 Zeilen mit Fan not rotating pro Tag)? Der zweite Weg ist damit gleich fertig. Vielen Dank fuer Ihre Ratschlaege. rasch perl-tags by betterworld Modedit Gwendragon: Titel ergänzt Last edited: 2009-07-15 14:39:29 +0200 (CEST) |