Thread Logfile abarbeiten, brauche Denkanstoß (6 answers)
Opened by FlorianL at 2010-11-19 11:59

topeg
 2010-11-19 12:31
#142875 #142875
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Das ganze hat Fehler.


Code (perl): (dl )
1
2
3
4
5
foreach (<BADWORDS>) {
                                if ($line =~ /$_/) {
                                        print $_;
                                }
                        }

Das wird nur einmal durchlaufen, wenn die Datei "badwords.db" vollständig gelesen ist, wird die Schleife nicht mehr ausgeführt. Weiterhin wird unter Umständen eine Zeile mehrfach ausgeben, wenn in einer Zeile mehrere Wörter, die auf der Suchliste stehen vorkommen.

Ich habe das mal kurz etwas umgeschrieben:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use warnings;
use strict;
use FindBin '$Bin';

my $wordsfile="$Bin/badwords.db";
my $logfilepath = "/minecraft/bin/logs/";
my @logfiles = glob("$logfilepath*.log");

open(my $fh, '<', $wordsfile) or die("Error open $wordsfile ($!)");
my @barwords=<$fh>;
close($fh);
chomp(@barwords);

for my $file (@logfiles)
{
  open(my $fh, '<', $file) or die ("Error open $file ($!)");
  while(my $line=<$fh>)
  {
    if($line=~/Sign|Antigrief/)
    { print $line; }
    elsif($line=~/Line/ && grep{$line=~/$_/}@barwords)
    { print $line; }
  }
}

View full thread Logfile abarbeiten, brauche Denkanstoß