next up previous contents
Next: About this document ... Up: Examen Télécom 2 - Previous: Tableau associatifs en PERL   Contents

Analyse de fichiers de trace (logfiles) en AWK et en PERL

Noubliez pas de commenter vos scripts Awk et Perl.

Voici un fichier de trace des messages (e-mails) échangés sur serveur:

[root@hobbes] cat /var/log/maillog
May 25 01:20:00 hobbes sendmail[1313]: BAA01313: from=pierre@free.fr, size=227, msgid=<200005242320.BAA01313@hobbes.watterson>
May 25 01:20:00 hobbes sendmail[1313]: BAA01313: to=julien@upn.fr, ctladdr=root (0/0), delay=00:00:00, stat=Sent
May 25 01:30:00 hobbes sendmail[1699]: BAA01699: from=julien@upn.fr, size=227, msgid=<200005242330.BAA01699@hobbes.watterson>
May 25 01:30:00 hobbes sendmail[1699]: BAA01699: to=root@localhost, ctladdr=root (0/0), delay=00:00:00, stat=Sent
...

Le problème à résoudre est celui d'analyser un fichier de trace qui indique la gestion des messages sur le serveur (les messages sont envoyés vers le destinataire indiqué après la chaîne "to=" et ceux reçus de l'émetteur indiqué après la chaîne"from=").

Affichez pour chaques adresses (émetteur ou destinataire) la quantitée totale de messages envoyé, la taille totale des messages envoyés (indiquée après la chaîne "size="), le nombre de messages reçut et la taille totale des messages envoyés (indiquée dans la ligne de réception qui a le même numéro d'identification que la ligne concernant le message en émission).

  1. Ecrivez le script correspondant en AWK:

    ..

      
    #!/usr/bin/awk -f
    # Analyse maillog
    
    BEGIN {
        FS = "[ =,]+";
    }
    
    / from/ {               # blanc avant pour ne pas correspondre à une adresse
        $8 = tolower($8);   # adresse en minuscule
        taille[$6]=$10;     # mémorise la taille (toujours "from=" avant "to=")
        em_nb[$8]++;
        em_taille[$8]+=taille[$6];
    }
    
    / to/ {                 # blanc avant pour ne pas correspondre à une adresse
        $8 = tolower($8);   # adresse en minuscule
        re_nb[$8]++;
        re_taille[$8]+=taille[$6];   
    }
    
    END {
        for (i in em_nb)    #meme identificateur pour em_nb et em_taille 
            {
                print "L'émmeteur",i,"a envoyé",em_nb[i],"messages (soit",em_taille[i],"octets)";
            }
        for (i in re_nb)    #meme identificateur pour re_nb et re_taille 
            {
                print "Le récepteur",i,"a recut",re_nb[i],"messages (soit",re_taille[i],"octets)";
            }
    }
    
    ..

  2. Ecrivez le script correspondant en PERL:

    ..

      
    Bientot...
    
    ..


next up previous contents
Next: About this document ... Up: Examen Télécom 2 - Previous: Tableau associatifs en PERL   Contents
Olivier Fourmaux 2001-10-26