|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
vergleichende
|
Seitenanfang |
| Saluton Leute, Nachdem meine Birne immer wärmer wird aber eine sinnvolle Lösung immer weiter weg zu sein scheint, dachte ich mir über einen post im Forum vielleicht eine Hilfestellung netterweise in Anspruch nehmen zu können. Da ich ein ziemlicher newbie bin, ist die Lösung wahrscheinlich ziemlich einfach und ich hoffe, daß die Banalität der Situation nicht eine Beleidigung an eure Intelligenz darstellt. however, so siehts aus: ich habe einen Array der mit einem Haufen log-Einträge gefüllt ist. Es gilt einfach jede Zeile miteinander zu vergleichen und die häufigsten Einträge darstellen zu können (aber natürlich jeweils nur einer!). Aber WIE...? Nachdem ich den Array sortiert habe, die Anzahl der Chars ermittelt, und diese wiederum numerisch sortiert u.ä. musste ich feststellen "ich hab mich verrant!" Es geht bestimmt einfacher, ne Nacht drüber schlafen oder ein Perl-Buch kaufen tuts vielleicht, aber ich bin ziemlich am Ende mit meiner Geduld und würde mich über Hilfe freuen. mfg leute... Janek #>quota thread :)
Datum: 28.04.2005-16:03

|
re: vergleichende
|
Seitenanfang |
| Hallo probier mal das hier: #!/perl/bin/perl use strict; use warnings;my @array=(1,2,3,4,5,6,7,8,9,8,7,6,5,4,5,6,7,8,9); my %hash; my $key; # die felder des arrays werde zu schluesseln für einen hash # fuer jedes feld des array wird der entsprechende hash-wert hochgezählt, # weil ein schluessel in einem hash nur einmal vorkommen kann foreach (@array) { $hash{$_}++; } foreach $key (sort keys %hash) { print 'Eintrag: ',$key,' Anzahl: ',$hash{$key},"\n"; }
Ciao Ingo
Datum: 29.04.2005-07:43

|
re: vergleichende
|
Seitenanfang |
| Hallo Ingo, danke für den Ansatz, leider funzt det nich. Die Felder meines Ausgangsarray sind mit unterschiedlich langen Strings gefüllt. Um die höchste Häufigkeit eines Eintrages zu ermitteln, dachte ich, daß die Anzahl der chars jeden Strings weiterhelfen würde. Ist im Prinzip aber das selbe. Selbst wenn man jedem String der Liste als key die exakte Anzahl der chars zuordnet fehlt aber - kasus knacktus! - eine Vergleichsoperation die quasi sagt: dieser Eintrag x mal, dieser Eintrag y mal etc. Soetwas muss doch realisierbar sein und ist glaubich der einzige Ansatz zur Lösung des Problems....gibts da nüscht ? lg..Janek
Datum: 29.04.2005-11:03

|
re: vergleichende
|
Seitenanfang |
| Hallo, so ganz versteh ich Dich nicht. Poste mal einen Auszug aus der Log-Datei. Das würde es einfacher machen. Gedanke: Im Prinzip kannst du alle Log-Einträge am Leerzeichen splitten und dann alles in ein einziges Array speichern und dann mit der gezeigten Methode die Anzahl jeden Strings zählen lassen, der in der Log vorkommt. Ciao Ingo
Datum: 30.04.2005-13:08

|
re: vergleichende
|
Seitenanfang |
| hallöle nochmal, also hier ist ein Auszug: //[Sat May 01 10:00:14 2004] [notice] Apache/2.0.44 (Unix) DAV/2 configured -- resuming normal operations [Sat May 01 10:00:14 2004] [info] Server built: Mar 7 2003 14:41:06 [Sat May 01 10:00:14 2004] [debug] prefork.c(1039): AcceptMutex: pthread (default:pthread) [Mon May 03 02:09:48 2004] [notice] child pid 23464 exit signal Segmentation fault (11)// es gilt also diese und die anderen Tausend Einträge miteinander zu vergleichen um sich dann die sich am häufigsten wiederholenden Einträge, nach häufigstem Vorkommen, sortiert ausgeben zu lassen. Wie würdest du denn da rangehen... vielen dank nochmal Jan
Datum: 01.05.2005-11:59

|
re: vergleichende
|
Seitenanfang |
| Hallo, ich habe da noch einmal einen Vorschlag für eine Lösung: #!/perl/bin/perl use strict; use warnings;my @array=( '[Sat May 01 10:00:14 2004] [notice] Apache/2.0.44 (Unix) DAV/2 configured -- resuming normal operations', '[Sat May 01 10:00:14 2004] [notice] Apache/2.0.44 (Unix) DAV/2 configured -- resuming normal operations', '[Sat May 01 10:00:14 2004] [notice] Apache/2.0.44 (Unix) DAV/2 configured -- resuming normal operations', '[Sat May 01 10:00:14 2004] [info] Server built: Mar 7 2003 14:41:06', '[Sat May 01 10:00:14 2004] [debug] prefork.c(1039): AcceptMutex: pthread (default:pthread)', '[Sat May 01 10:00:14 2004] [debug] prefork.c(1039): AcceptMutex: pthread (default:pthread)', '[Sat May 01 10:00:14 2004] [debug] prefork.c(1039): AcceptMutex: pthread (default:pthread)', '[Mon May 03 02:09:48 2004] [notice] child pid 23464 exit signal Segmentation fault (11)'); my %hash; my $key; # die felder des arrays werde zu schluesseln für einen hash # fuer jedes feld des array wird der entsprechende hash-wert hochgezählt, # weil ein schluessel in einem hash nur einmal vorkommen kann foreach (@array) { # diese regex filter nur die meldung heraus, das Datum und die Bezeichnung # notice debug info werde abgeschnitten # willst du mehr, dann filter dir hier die zeichenkette, die du suchst $_ =~ /\[.*\] (.*)$/g; print $1,"\n"; $hash{$1}++; } print "\n"; foreach $key (sort keys %hash) { print 'Eintrag: ',$key,' Anzahl: ',$hash{$key},"\n"; }
Ciao Ingo
Datum: 02.05.2005-07:44

|
re: vergleichende
|
Seitenanfang |
Hi Ingo, auch ein Ansatz, habe es aber mittlerweile über einen sehr ähnlichen weg mehr oder minder schön hinbekommen ! vielen Dank auf jeden Fall für die Mühe gruß Janek
Datum: 04.05.2005-12:15

|
|

|

|

|
 |

|

|
|