next up previous contents
Next: Analyse de fichiers de Up: Examen Télécom 2 - Previous: Exercices de programmation AWK   Contents

Tableau associatifs en PERL et en AWK

Noubliez pas de commenter vos scripts Awk et Perl.

Le problème à résoudre est celui d'analyser un fichier de texte (donc composé de caractères alphanumériques, de caractères de ponctuation, et de sauts de ligne) pour trouver toutes les répétitions (mots présent dans le texte au moins deux fois - attention à ne pas intégrer la ponctuation dans les mots!). Affichez la liste des mots répétés.

Pour cet exercice, il est imposé d'utiliser un tableau associatif.

  1. Ecrivez le script correspondant en AWK:

    ..

    #!/usr/bin/awk -f
    # Affiche les mots répétés dans un texte
    
    {
        $0 = tolower($0);                # tout en minuscules
        gsub(/[^a-z0-9_ \t]/, "", $0);   # retire la ponctuation
        for (i = 1; i <= NF; i++)
            tab_freq[$i]++;
    }
    
    END {
        cmd_sort = "sort +1 -nr";
        for (mot in tab_freq)
            if (tab_freq[mot] > 1) 
                printf "%s\t%d\n", mot, tab_freq[mot] | cmd_sort;
        close(cmd_sort);
    }
    
    ..

  2. Ecrivez le script correspondant en PERL:

    ..

    #!/usr/bin/perl
    # Affiche les mots répétés dans un texte
    
    # Parcours du fichier en paramètre
    while (<>) { 
        $_ = lc; # tout en minuscules
        @ tab_ligne = split("[^a-z0-9_]"); # découpe selon la ponctuation
        foreach $mot (@tab_ligne){
            $tab_freq{$mot}++;
        }
    }
    
    open (FHO, '| sort +1 -nr');
    foreach $mot (keys(%tab_freq)){
        if ($tab_freq{$mot} > 1){
            printf FHO "%s\t%d\n", $mot, $tab_freq{$mot};
        }
    }
    close FHO
    
    ..



Olivier Fourmaux 2001-10-26