web-dev-qa-db-ja.com

bashでは、先頭にゼロを付けて整数を追加し、指定したバッファーを維持するにはどうすればよいですか

たとえば、001から100まで数えたいとします。ゼロバッファーは2、1から始まり、100以上になると最終的に0になります。

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

Printf "%02d" $ iを使用して、数値に事前定義されたゼロの数がある場合、これを行うことができます。しかし、それは静的で動的ではなく、私の例では機能しません。

29
readdit

静的または動的で、幅に変数を使用できるようにする場合は、次のようにします。

$ 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

アスタリスクは、引数リストで対応する変数の値($padtowidth この場合)。

それ以外の場合、例が機能しない唯一の理由は、値が結果の合計であるため、「2」(おそらく、適用する最大のパディングであるかのように)を「3」(私の例のように)にする必要がある場合です。幅(パッドのみの幅ではありません)。

33

システムにある場合は、seq-w--equal-width)オプション:

$ 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
33
mob

Bashバージョン4(bash -versionを使用)では、 ブレース展開 を使用できます。 0いずれかの制限の前に、数値にゼロが埋め込まれるように強制します

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

上記のコードは、max/terminal値に含まれる桁数に基づいて、0の正しい数で数値を自動パディングします。 max変数を変更するだけで、残りを処理できます。

例:

最大= 10

01
02
03
04
05
06
07
08
09
10

最大= 100

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

最大= 1000

0001
0002
0003
0004
0005
0006
...
0997
0998
0999
1000
5
SiegeX
# 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   
4
juan

変数のパディングを使用して、変数までの値を埋め込む必要がある場合:

$values_count=514;
$padding_width=5;

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

これにより、00000、00001、... 00513が出力されます(現在の回答が自分のニーズを満たすものを見つけられませんでした)。

0
khaverim