609 Stimmen

Wie man Null-Pad eine Folge von Integer in Bash, so dass alle die gleiche Breite haben?

Ich brauche eine Schleife für einige Werte,

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

Para $first y $last Ich brauche eine feste Länge von 5. Wenn die Eingabe also lautet 1 muss ich Nullen vorangestellt werden, so dass es zu 00001 . Er schleift bis 99999 zum Beispiel, aber die Länge muss 5 sein.

Z.B.: 00002 , 00042 , 00212 , 012312 und so weiter.

Haben Sie eine Idee, wie ich das machen kann?

984voto

Dave Webb Punkte 184809

In Ihrem speziellen Fall ist es jedoch wahrscheinlich am einfachsten, die -f Flagge zu seq um die Zahlen bei der Ausgabe der Liste zu formatieren. Zum Beispiel:

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

wird die folgende Ausgabe erzeugt:

00010
00011
00012
00013
00014
00015

Allgemeiner ausgedrückt, bash hat printf als eingebaut, so dass Sie die Ausgabe wie folgt mit Nullen auffüllen können:

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

Sie können die -v Flag, um die Ausgabe in einer anderen Variablen zu speichern:

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

Beachten Sie, dass printf unterstützt ein etwas anderes Format als seq Sie müssen also %05d anstelle von %05g .

206voto

Indie Punkte 1715

Noch einfacher ist es, wenn Sie einfach

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

144voto

m_messiah Punkte 1907

Wenn das Ende der Sequenz die maximale Länge des Auffüllens hat (zum Beispiel, wenn Sie 5 Ziffern wollen und der Befehl seq 1 10000 ), dann können Sie -w Flag für seq - es fügt selbst Polsterung hinzu.

seq -w 1 10

würde produzieren

01
02
03
04
05
06
07
08
09
10

117voto

frankc Punkte 10886

Printf mit "%05d" verwenden, z.B.

printf "%05d" 1

30voto

jaypal singh Punkte 70917

Sehr einfach mit printf

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X