A voir également:
- Decompte de parttern avec awk
- Decompte de module et Somme avec AWK ✓ - Forum - Redhat
- Décompte nouvel an ✓ - Forum - Musique / Radio / Clip
- Décompte décollage fusée en anglais - Forum - Musique / Radio / Clip
- Musique decompte - Forum - Musique / Radio / Clip
- Decompte nouvel an - Forum - Programmation
1 réponse
mamiemando
- Messages postés
- 29583
- Date d'inscription
- jeudi 12 mai 2005
- Statut
- Modérateur
- Dernière intervention
- 21 février 2021
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
C est super Merci Beaucoup pour ton coup de main.
Bonne et heureuse année 2021 à tous
Merci encore