perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 22
Click for quality!




11.02.2012 / 08:34

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragvergleichende
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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

-






-
-