Formater un résultat
Résolu
dna.factory
Messages postés
26003
Date d'inscription
Statut
Modérateur
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai une question toute bête.
j'ai le résultat d'une commande qui est sous la forme d'un nombre, pour l'instant, entre 10 et 999, mais techniquement entre 1 et 999999
je voudrais transformer mon résultat sous la forme XX.XX.XX (avec des zéros à gauche).
alors en soit, je suis pas bloqué... dans le pire des cas, je comptes le nombre de chiffres avec ${#variable}, je rajoute (6-longeur) zéros devant, et une fois que j'ai une longueur fixe, je awke ou sede les points sans trop de difficulté (quitte à faire 3 substrings).
Mais comme souvent, je suppose qu'il y a beaucoup plus 'propre' et simple (je pense à printf entre autre).
Est-ce que vous pouvez m'aider ? (jai failli oublier de mettre une question).
Ya des point bonus pour l'esthétique.
entrée :
125
10
4501
sortie
00.01.25
00.00.10
00.45.01
Stop failing the turing test !
J'ai une question toute bête.
j'ai le résultat d'une commande qui est sous la forme d'un nombre, pour l'instant, entre 10 et 999, mais techniquement entre 1 et 999999
je voudrais transformer mon résultat sous la forme XX.XX.XX (avec des zéros à gauche).
alors en soit, je suis pas bloqué... dans le pire des cas, je comptes le nombre de chiffres avec ${#variable}, je rajoute (6-longeur) zéros devant, et une fois que j'ai une longueur fixe, je awke ou sede les points sans trop de difficulté (quitte à faire 3 substrings).
Mais comme souvent, je suppose qu'il y a beaucoup plus 'propre' et simple (je pense à printf entre autre).
Est-ce que vous pouvez m'aider ? (jai failli oublier de mettre une question).
Ya des point bonus pour l'esthétique.
entrée :
125
10
4501
sortie
00.01.25
00.00.10
00.45.01
Stop failing the turing test !
A voir également:
- Formater un résultat
- Comment formater un pc - Guide
- Formater clé usb - Guide
- Resultat foot - Télécharger - Vie quotidienne
- Formater un pc bloqué par administrateur - Guide
- Lexer resultat - Télécharger - Sport
2 réponses
Salut,
En attendant dubcek pour une solution avec printf et/ou awk, voici la mienne avec sed ;-))
En attendant dubcek pour une solution avec printf et/ou awk, voici la mienne avec sed ;-))
$ cat fich
125
10
4501
$ sed ':z;s/^.\{1,5\}$/0&/;tz;s/..\B/&./g' fich
00.01.25
00.00.10
00.45.01
hello
quelques variantes,
quelques variantes,
$ awk -F "[<>]" '{x=sprintf ("%06d", $3); print substr(x, 1, 2) "." substr (x, 3, 2) "." substr(x, 5)}' fichier
00.01.25
00.00.10
00.45.01
$ sed -r 's/[^0-9]//g; s/.*/printf "%06d" &/e; s/(^..)(..)/\1.\2./' fichier
00.01.25
00.00.10
00.45.01
$ awk -F "[<>]" '{printf "%06d\n", $3}' fichier | sed -r 's/(^..)(..)/\1.\2./'
00.01.25
00.00.10
00.45.01
Y'a pas à dire, coté esthétique, ça se pose là...
Par contre, je vais mettre ça dans mon programme, et dans un an, je vais être là : 'merde, qu'est-ce que ça fait ce truc '..
Là on vérifie que la ligne comprend entre 1 et 5 caractère(s), et si c'est le cas on substitue la ligne par elle même (&) précédé d'un 0 (zéro)
Si et seulement si une substitution a eu lieu précédemment, se brancher (commande t) à l'étiquette (z) et recommencer.
Quand on a bien 6 caractères, on substitue chaque 2 caractères par eux-mêmes suivis d'un point, sauf si on est en limite de caractère (\B) en fin de ligne quoi.
En vrai, mon entrée était en xml :
<cle>125</cle>
j'avais déja fait un petit awk -F '<|>' {print $3}'
Juste pour le trip, tu peux me montrer ce que donnerait le sed qui vire les balises xml au passage ?