Logfile mit Perl auswerten

Dieses Thema im Forum "Script Serverseitig" wurde erstellt von netzmeister, 22. März 2004.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. netzmeister

    netzmeister New Member

    Registriert seit:
    12. Januar 2002
    Beiträge:
    56
    Hi!

    Ich habe hier eine kleine Vorlage für ein Perl-Skript, dass aus einer vorhandenen Datei alle Mailempfänger rausliest und zusammenzählt, wieviel kb jeder User bekommen hat.

    Da das Skript nur immer die gesamte Datei auswertet und das Datum nicht berücksichtigt, würde ich das gerne mit reinpacken, d.h. das Skript soll mir pro Mailempfänger und Tag die kb auflisten.

    Vorher:
    user[at]domain.tld;1024
    benutzer[at]domain.tld;0

    Nachher:
    user[at]domain.tld;2004-03-21;812
    user[at]domain.tld;2004-03-22;212
    benutzer[at]domain.tld;2004-03-21;0
    benutzer[at]domain.tld;2004-03-22;0

    Folgender Code liefert mir das Vorher-Erzeugnis:

    my %summe;
    while (<MAILLOG>) {
    my ($user, $bytes) = (split /\s+/)[6,8];
    $summe{$user} ||= 0;
    $summe{$user} += $bytes;
    }
    [...]
    for (keys %summe) {
    print "$_;$summe{$_}\n";
    }

    Wo bzw. wie muss ich denn da rangehen, damit keine Mengen pro User und File sondern Mengen pro User und Tag geführt werden?

    Ich stelle mir vor, dass man das irgendwie so erweitern könnte, klappt aber nicht richtig.

    my %summe;
    while (<MAILLOG>) {
    my ($date, $user, $bytes) = (split /\s+/)[0,6,8];
    $summe{$user}{$date} ||= 0;
    $summe{$user}{$date} += $bytes;
    }
    [...]
    my $idx;
    for (keys %summe) {
    $idx = $_;
    print "$summe{$_};";
    for (keys %summe{$idx}) {
    print "$summe{$idx}{$_}\n";
    }
    }

    Wer kann kurz helfen?
    Vielen Dank!

    Gruss,
    Alexander

    Nachricht geändert von netzmeister am 22.03.2004 15:35
     
  2. Daniel Bradler

    Daniel Bradler Eingetragener Provider

    Registriert seit:
    19. Juni 2000
    Beiträge:
    1.118
    Firmenname:
    Providerdienste.de
    Anbieterprofil:
    Klick
    Warum nicht "for my $idx (keys %summe)"?

    Das ist ziemlich unsinnig, da $summe{$_} eine Referenz auf einen Hash sein dürfte.

    So sollte es funktionieren (ungetestet):

    for my $date (keys %{$summe{$idx}}) {
    ...
    }

    Viele Grüße,
    Daniel Bradler

    Nachricht geändert von Daniel Bradler am 22.03.2004 15:51
     
  3. netzmeister

    netzmeister New Member

    Registriert seit:
    12. Januar 2002
    Beiträge:
    56
    Vielen Dank, das funktioniert wunderbar.

    Gruss,
    Alexander
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen