Veröffentlicht 25. August 200322 j hi, ich hab da ein kleines problem. ich habe mir einscript geschrieben, welches apache logfiles nach dem referer durchsucht, einfach um die herkunft der websiten besucher festzustellen. die ausgabe erfolgt in ein einfaches txt file. nun hab ich das problem das ich mehrere gleich einträge in der ausgabe.txt vorfinde. gibt es sowas wie ein "uniq" unter *nix in perl .... ideenanstöße erwünscht
25. August 200322 j Original geschrieben von dosenfutta ideenanstöße erwünscht Na, dann wollen wir mal: Bau Dir doch ein Hash dass aus Referrer=>Anzahl besteht. Somit kannst Du nachvollziehen, wie oft Deine Seiten von welcher Seite aufgerufen wurden. Das Grobprinzip ist: if (exists $hash{$referrer}) { $hash{$referrer}++; } else { $hash{$referrer} = 1; } Danach durchläufst das Array sequentiell und liest alle Schlüsselpaare aus und schreibst sie in Deine Datei. ICQ
25. August 200322 j na dann wollen wir mal wieder das problem das ich habe ist im moment nur, das das gesamte ergebnis in einer variablen gespeichert wird und dann ausgegeben wird. hier ein auszug #!/usr/bin/perl -w $checkdir =""; @exclude = ("blabla" , "was man alles ausschliessen will", ); # subs sub in_array { foreach $deny(@_) { # $zeile wird noch durch standartvariable ersetzt if($zeile =~ m/$deny/) { return 1; } } } opendir(LOGS,"/logs") || die "no directory"; @listing=readdir(LOGS); closedir(LOGS) || die "couldn't close directory"; $ausgabe = "ausgabe.txt"; open(AUSGABE, ">$ausgabe"); foreach $dir(@listing) { $logfile ="access.log"; $pfad = "/logs/$dir/$logfile"; if(-e $pfad) { open(LOGFILE, "$pfad"); @content=<LOGFILE>; close(LOGFILE); foreach $zeile(@content) { if($zeile =~ /http(.*)/) { $zeile_http = "http$1"; } $zeile_http =~ s/(\".*\".*\")//g; $array_check = in_array(@exclude); if ($array_check != 1 && $zeile =~ /http/) { if($checkdir ne $dir) { $checkdir = $dir; $test .= "\n\n$dir\n"; $test .= "======================================\n"; } $test .= "$zeile_http\n" ; } else { } } } } print AUSGABE "$test"; close(AUSGABE); wie du unschwer erkennen kannst, wird am ende alles in der variablen $test gespeichert. ist es möglich die variable direkt in nen array zu pushen oder besser nen hash und dann mit sort oder so zu arbeiten?
25. August 200322 j Original geschrieben von dosenfutta ist es möglich die variable direkt in nen array zu pushen oder besser nen hash und dann mit sort oder so zu arbeiten? Warum so umständlich? Bau doch an der Stelle, wo Du $test mit $zeile_http füllst die Hashüberprüfung von oben ein und mach hinter der Leseschleife eine Schleife zum durchlesen des Hashs rein und pack's in $test, dann musst Dein Programm kaum umstellen. Darfst nur nicht vergessen, das Hash vor jeder Datei wieder zu löschen! EDIT: Musst natürlich keine Schleife machen, kannst ja auch mit 'nem Join arbeiten, fällt mir gerade ein. ICQ
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.