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 33499 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 janvier 2025 - 12 févr. 2021 à 19:23
mamiemando Messages postés 33499 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 janvier 2025 - 12 févr. 2021 à 19:23
A voir également:
- Decompte de parttern avec awk
- Comment faire un décompte sur excel ✓ - Forum Excel
- Mettre un décompte en fond d'écran - Forum Graphisme
- Compte à rebours en fond d'écran - Forum Logiciels
- Faire un décompte de jour sur excel - Forum Excel
- Décompte - Télécharger - Divers Utilitaires
1 réponse
mamiemando
Messages postés
33499
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 janvier 2025
7 818
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