Domanda

Per esempio, voglio contare da 001 a 100. Si intende la memoria zero sarebbe iniziare con 2, 1, poi alla fine 0 quando raggiunge 100 o più.

es: 001 002 ... 010 011 ... 098 099 100

ho potuto fare questo se i numeri avevano un numero predefinito di zeri con printf "% 02d" $ i. Ma questo è statica e non dinamica e non avrebbe funzionato nel mio esempio.

È stato utile?

Soluzione

Se per statica rispetto dinamica vuol dire che ti piacerebbe essere in grado di utilizzare una variabile per la larghezza, si può fare questo:

$ padtowidth=3
$ for i in 0 {8..11} {98..101}; do printf "%0*d\n" $padtowidth $i; done
000
008
009
010
011
098
099
100
101

L'asterisco viene sostituito dal valore della variabile corrisponde nella lista degli argomenti ($padtowidth in questo caso).

In caso contrario, l'unica ragione per cui il tuo esempio non funziona è che si utilizza "2" (forse come se fosse l'imbottitura massima da applicare) quando dovrebbe essere "3" (come nel mio esempio) dal momento che il valore è la larghezza totale risultante (non il pad sola larghezza).

Altri suggerimenti

Se il sistema ha, provate seq con il -w (--equal-width) l'opzione:

$ seq -s, -w 1 10
01,02,03,04,05,06,07,08,09,10

$ for i in `seq -w 95 105` ; do echo -n " $i" ; done
095 096 097 098 099 100 101 102 103 104 105

In Bash versione 4 (uso bash -version) è possibile utilizzare espansione delle graffe . Mettere un 0 prima né forze limite i numeri da riempito da zeri

echo {01..100} # 001 002 003 ...
echo {03..100..3} # 003 006 009 ...
#!/bin/bash

max=100; 

for ((i=1;i<=$max;i++)); do 
    printf "%0*d\n" ${#max} $i
done

Il codice qui sopra auto-pad i numeri con il numero corretto di 0 sulla base di quante cifre del valore massimo / terminale contiene. Tutto quello che dovete fare è cambiare la variabile max e si occuperà del resto.

Esempi:

max = 10

01
02
03
04
05
06
07
08
09
10

max = 100

001
002
003
004
005
006
...
097
098
099
100

max = 1000

0001
0002
0003
0004
0005
0006
...
0997
0998
0999
1000
# jot is available on FreeBSD, Mac OS X, ...    
jot -s " " -w '%03d' 5   
jot -s " " -w '%03d' 10  
jot -s " " -w '%03d' 50  
jot -s " " -w '%03d' 100   

Se avete bisogno di pad valori fino ad un numero variabile con imbottitura variabile:

$values_count=514;
$padding_width=5;

for i in 0 `seq 1 $(($values_count - 1))`; do printf "%0*d\n" $padding_width $i; done;

Questo sarebbe stampare 00000, 00001, 00513 .... (Non ho trovato nessuna delle risposte attuali soddisfare il mio bisogno)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top