Bashでは、先頭のゼロで整数を追加し、指定されたバッファーを維持するにはどうすればよいですか
-
02-10-2019 - |
質問
たとえば、001から100にカウントしたいと考えています。つまり、ゼロバッファーは2、1から始まり、最終的には100以上に達すると0が0になります。
例:001 002 ... 010 011 ... 098 099 100
数字がprintf "%02d" $ iを使用して事前定義された数のゼロを持っていた場合、これを行うことができました。しかし、それは静的であり、動的ではなく、私の例では機能しません。
解決
静的対動的によって、幅に変数を使用できるようにしたい場合は、これを行うことができます。
$ 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」(おそらく、適用するための最大パディングであるかのように)を使用することです。幅(パッドのみの幅ではありません)。
他のヒント
システムがある場合は、試してみてください 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
bashバージョン4(bash -versionを使用)で使用できます ブレース拡張. 。パットa 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
上記のコードは、最大/端子値に含まれる数桁に基づいて、正しい数の0で数値を自動パッドします。あなたがする必要があるのは、変更することだけです max
可変で、残りを処理します。
例:
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
可変パディングを備えた変数番号まで値をパッドする必要がある場合:
$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を印刷します。
所属していません StackOverflow