Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

perl + ausgabe

Empfohlene Antworten

Veröffentlicht

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

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

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?

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.