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.
..
#!/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); }..
..
#!/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..