TD Système S2D*

awk, perl, grep et les expressions régulières

1. AWK

Vous avez une description de la commande awk dans le manuel en ligne (man awk), dans le polyopié de cours ou sur le web (http://www.shellunix.com/awk.html, http://w3.uqah.uquebec.ca/DOC/unx_awk.html)

Un fichier de log conserve des traces écrites par un programme pendant son exécution, pour pouvoir les analyser ensuite. On donne un fichier de log généré par procmail, qui trie les messages reçus par un utilisateur pour essayer de séparer les 'spams' (pourriels en français) des vrais messages sur des bases statistiques fournies par Spamassassin. Vous allez commencer son analyse.

Ramener le fichier procmail.log. Afficher les 12 premières ou les 12 dernières lignes pour voir son format. Chaque bloc répété correspond à un message traité.

1. Combien le fichier fait-il de lignes ? combien y a-t-il de messages traités ? Quels sont les noms des boites aux lettres dans lesquelles ils sont déposés (bien vérifier par programme) ?

Les boites dont le nom commence par attente servent à déposer des spams en attente de traitement. Parmi les mails reçus, combien sont-ils de probables spams ?

2. (Pour cette question, il peut être commode de mettre le programme awk dans un fichier) Faire la liste des dates auxquelles des mails ont été envoyés (c'est un préliminaire). Compter le nombre de messages envoyés en moyenne par jour, et faire le calcul exact pour chaque jour [aide : on peut utiliser un tableau dont les indices sont des chaînes de caractères, par exemple la date]. Donnez les résultats dans l'ordre.

Calculez de plus pour chaque jour le volume des spams reçus.

    3. A partir des résultats de la question 2, calculez à l'aide de awk le nombre moyen et le volume moyen de mails sur la période pour chaque jour de la semaine (lundi, mardi, mercredi, etc...)

2- Perl

Dans le polycopié « Les expressions régulières : techniques d'utilisation », vous avez un exemple de programme écrit en Perl qui implémente le traitement suivant :

pour toutes les lignes du fichier faire
     si la ligne vérifie le critère alors
        traiter la ligne
     finsi
finpour

On vous demande de programmer en Perl le dernier exemple de ce même polycopié.

3- Grep

Nous avons un fichier texte qui contient des adresses électroniques, par exemple :

christophe.cerin@iutv.univ-paris13.fr

cerin@iutv.univ-paris13.fr

cerin@univ-paris13.fr

christophe.cerin@univ-paris13.fr

Nous voulons vérifier que les adresses sont dans l'un des formats suivants :

<token>.<token>@<token>.<token>.<token1>

<token>@<token>.<token>.<token1>

<token>@<token>.<token1>

<token>.<token>@<token>.<token1>

Avec <token1> étant composé d'au plus 3 caractères alphabétiques et au moins 2, <token> étant composé de caractères alphabétiques, digits, -, _. Ainsi les 4 précédentes adresses sont acceptées mais pas christophe.cerin@zinzolin.iutv.univ-paris13.fr

Ecrire la vérification de ce format au moyen de la commande egrep et faire des vérifications à partir de l'exemple ci-dessus.