Hello,
J'ai un programme awk qui compte et affiche les 5 mots qu'on trouve le plus dans un fichier. Je souhaite le faire en perl, j'ai essayé plein de trucs, mais je dois vous avouez que je sèche un peu (beaucoup même). C'est pourquoi je demande de l'aide.
Voici mon programme en awk
Code awk : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #!/usr/bin/awk -f { $0=tolower($0); #On met tout en minuscule gsub(/[^a-z0-9_ \t]/,"",$0) #On enleve les carac indésirables #on insère ou incrémente les occurences de ts les mots de la ligne courante for (i = 1; i<=NF; i++) tab_des_frequences[$i]++; } END { #affichage commande_de_fin="sort +1 -nr | head -5" ; #tri numérique décroissant ou flux de sortie et 6 premiers for (mot in tab_des_frequences) #Pr ts les mots trouvés dans le text if (tab_des_frequences[mot]>1) printf "%s\t%d\n", mot, tab_des_frequences[mot] | commande_de_fin; }
Et voici ce que j'ai essayé en perl (je sais très bien que ma boucle For est fausse car "for in" n'existe pas en perl"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #!/usr/bin/perl use strict; use warnings; my $i; $_ = lc; #met les caractères de la ligne courante en miniscule my @tab_ligne = split("[^a-z0-9_]"); #découpe selon la ponctuation while (<>) { my @tab_freq[$i]++; } open(FHO, '| sort -n | tail -5'); for (my $mot in my @tab_freq[$i]) if ($tab_freq[$mot]>1) printf FHO "%25s\t%d\n", $tab_freq{$mot},$mot;
Merci d'avance
Partager