Transformer une valeur numérique
bzhmickael35
Messages postés
4
Statut
Membre
-
lEprofSonDkon Messages postés 227 Statut Membre -
lEprofSonDkon Messages postés 227 Statut Membre -
Bonjour,
Je cherche à réaliser un petit script pour transformer une valeur obtenu avec l'aide d'un AWK. Je souhaite transformer :
Merci d'avance pour toute l'aide apportée.
Je cherche à réaliser un petit script pour transformer une valeur obtenu avec l'aide d'un AWK. Je souhaite transformer :
3001-3009en
3001,3002,3003,3004,3005,3006,3007,3008,3009.
Merci d'avance pour toute l'aide apportée.
2 réponses
-
Bonjour,
Voici une manière de procéder :
script.awk
/[0-9]+-[0-9]+/ { n = split($0, array, "-") imin = int(array[1]) imax = int(array[2]) s = ""; for (i = imin; i <= imax; i++) { if (i > imin) s = s "," s = s i; } print s; }
Ce qui donne à l'exécution :
(mando@silk) (~) $ echo "3001-3009" | awk -f script.awk
3001,3002,3003,3004,3005,3006,3007,3008,3009
Quelques explications :- La première ligne s'assure que la ligne qui entre est formée de deux entiers séparés d'un tiret (voir expressions régulières)
- La ligne suivante sépare la ligne en question sur le caractère
-
et stocke les deux valeurs dans le tableauarray
. - On construit ensuite progressivement une chaine
s
en itérant sur les valeurs déduites dearray
.
Bonne chance -
hello
$ var="3001-3009"; seq -s "," ${var%%-*} ${var##*-}
3001,3002,3003,3004,3005,3006,3007,3008,3009