Decompte de parttern avec awk
Résolu/Fermé
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
-
Modifié le 5 févr. 2021 à 10:23
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 12 févr. 2021 à 19:23
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 12 févr. 2021 à 19:23
1 réponse
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
Modifié le 5 févr. 2021 à 10:58
Modifié le 5 févr. 2021 à 10:58
Bonjour,
Tu peux utiliser ce script, qui repose sur un tableau associatif (aka dictionnaire ou map selon les langages) :
toto.awk
Explication
toto.txt
Exécution
Exemple :
Si tu veux récupérer le contenu dans un fichier, on gère ça à l'appel du script :
Remarque
Note que les clés sont triés par ordre alphabétiques par
Bonne chance
Tu peux utiliser ce script, qui repose sur un tableau associatif (aka dictionnaire ou map selon les langages) :
toto.awk
{ if (NF >= 3) { for (i = 3; i <= NF; i++) { dict[$i] += 1; } s = $1 ";" $2; for (key in dict) { n = dict[key]; s = s ";" n key } print s; delete dict; } }
Explication
-
NF
compte le nombre de champs (fields) dans la ligne courante ($0
). Chaque field correspond aux valeurs prises par$1
,$2
, etc. - Dans la première boucle
for
, on stocke dansdict
pour chaque clé le nombre d'occurrences observées. Si une clé n'existe pas encore, comme en C++, la valeur correspondant est associée à une valeur par défaut (0
dans le cas d'un entier). - Ensuite on commence à préparer la chaîne
s
qui va contenir la chaîne transformée, en concaténant$1
, la chaîne de caractère ";" et$2
. - On itère sur chaque clé du dictionnaire
key
et on récupère le compteur associédict[key]
. - Enfin on affiche
s
sur la sortie standard
toto.txt
309;MRBTS-10309;1FRGU;2FXDB;1FSMF;2FBBA
309;MRBTS-20309;1FBBC;1FRMF;1FSMF;1FXED
3090;MRBTS-13090;1FBBC;3FHDB;1FSMF
Exécution
awk -f toto.awk toto.txt
Exemple :
(mando@silk) (~) $ awk -f toto.awk toto.txt
309;MRBTS-10309;1FRGU;2FXDB;1FSMF;2FBBA
309;MRBTS-20309;1FBBC;1FRMF;1FSMF;1FXED
3090;MRBTS-13090;1FBBC;3FHDB;1FSMF
Si tu veux récupérer le contenu dans un fichier, on gère ça à l'appel du script :
awk -f toto.awk toto.txt > toto2.txt
Remarque
Note que les clés sont triés par ordre alphabétiques par
awk. Le résultat n'est donc pas exactement celui posé dans la question, mais je suppose que ça n'est pas très important...
Bonne chance
12 févr. 2021 à 10:00
C est super Merci Beaucoup pour ton coup de main.
Bonne et heureuse année 2021 à tous
Merci encore
12 févr. 2021 à 19:23