PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mailadressen aus Logdatei extrahieren



bluelupo
15.04.2004, 20:12
Hallo zusammen,

da noch ein ziemlicher Anfänger in der Perlprogrammmierung bin wende mich an euch um bei meinen Problem weiter zu kommen. Ich will das Logfile von postfix auswerten bezüglich aller ankommen Mails die an alle Mailadressen meiner Domain kommen.

Eine solche Zeile schaut z.B so aus:

Dec 3 10:09:23 p15139717 postfix/local[23377]: A3B16204063: to=<bluelupo@meinedomain.de>, relay=local, delay=1, status=sent (mailbox)

Ich extrahiere mir den Namen vor den @-Zeichen herraus und summiere die eingenden Emails (pro Mailaccount) auf.


#!/usr/bin/perl -w
#
$LogDatei="./mail";
%mailadressen=();

# LogDatei oeffnen
open(INFILE, $LogDatei) or die "Datei $LogDatei nicht vorhanden !\n\n";

while (<INFILE>) {
if (/.* postfix\/local\[\d+\]: ([\w|\d]{1,11}): to=<(.*)@(.*)>.*/) {
$mailadressen{$2}++;
}
}

for (sort(keys %mailadressen)) {
print "$mailadressen{$_}\n";
}


Die Ausgabe schaut dann so aus:
# ./mailstats.pl
1
1
305
8

d.h. das vier verschiedene Mailadressen gefunden mit der Anzahl X eingegangener Mails. Ich hätte jetzt aber noch gerne die Mailadressen noch vor den jeweiligen Werten stehen. So etwa.

bluelupo: 1
root: 1
postmaster: 305
mailinglist: 8

Irgendwie schaffe ich es nicht noch die Mailadressen an die jeweilige Ausgabezeile auszugeben. Die if-Abfrage liefert das korrekte Ergebnis. Ich denke an dem Array (%mailadressen) liegts wohl. Grrrrr !

Das tuts leider auch nicht (angefügt ans Ende des Perlscriptes).


@allMailUsers=(sort(keys %mailadressen));
@allMails=(sort(values %mailadressen));
print "@allMailUsers --- @allMails\n";


Ausgabe:
bluelupo root postmaster mailinglist --- 1 1 305 8

Hat jemand einen Tip ?

Steve
15.04.2004, 20:35
print "$_:$mailadressen{$_}\n";


so müsste das gehen. ;)

bluelupo
15.04.2004, 20:40
print "$_:$mailadressen{$_}\n";


so müsste das gehen. ;)

Hi Steve,

....Danke das ist genau die Ausgabe die ich gebraucht habe. Manchmal sieht den Wald vor lauter Bäumen nicht mehr.