512 votes

Zéro De Remplissage En Bash

J'ai besoin de boucle de certaines valeurs,

for i in $(seq $first $last)
do
    does something here
done

Pour $first et $last, j'en ai besoin pour être de longueur fixe 5. Donc, si l'entrée est 1, j'ai besoin d'ajouter des zéros en avant de manière à ce qu'il devienne 00001. En boucle jusqu' 99999 par exemple, mais la longueur doit être de 5.

E. g.: 00002, 00042, 00212, 012312 et ainsi de suite.

Une idée sur comment je peux faire?

855voto

Dave Webb Points 90034

Dans votre cas particulier, mais il est probablement plus facile d'utiliser l' -f le drapeau en seq pour l'obtenir pour formater les nombres comme des sorties de la liste. Par exemple:

for i in $(seq -f "%05g" 10 15)
do
  echo $i
done

produira la sortie suivante:

00010
00011
00012
00013
00014
00015

Plus généralement, bash a printf intégrée de sorte que vous pouvez tampon de sortie avec des zéros comme suit:

$ i=99
$ printf "%05d\n" $i
00099

Vous pouvez utiliser l' -v drapeau pour stocker le résultat dans une variable:

$ i=99
$ printf -v j "%05d" $i
$ echo $j
00099

Notez que printf prend en charge un format légèrement différent de seq de sorte que vous devez utiliser %05d au lieu de %05g.

159voto

Indie Points 179

Encore plus simple il vous suffit de faire

for i in {00001..99999}; do
  echo $i
done

97voto

frankc Points 6014

utiliser printf "%05d" par exemple

printf "%05d" 1

24voto

jaypal Points 34440

Très simple à l'aide de printf

[jaypal:~/Temp] printf "%05d\n" 1
00001
[jaypal:~/Temp] printf "%05d\n" 2
00002

12voto

anubhava Points 172509

Utiliser awk comme ceci:

awk -v start=1 -v end=10 'BEGIN{for (i=start; i<=end; i++) printf("%05d\n", i)}'

SORTIE:

00001
00002
00003
00004
00005
00006
00007
00008
00009
00010

Mise à jour:

En tant que pur bash alternative que vous pouvez faire afin d'obtenir un même résultat:

for i in {1..10}
do
   printf "%05d\n" $i
done

De cette façon, vous pouvez éviter d' utiliser un programme externe seq qui n'est PAS disponible sur toutes les saveurs de *nix.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X