1. ホーム
  2. bash

[解決済み] bashで整数の列をゼロパッドして、すべて同じ幅にする方法は?

2022-03-19 22:24:46

質問

いくつかの値をループさせる必要があります。

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

について $first$last の場合、長さが5であることが必要です。 1 となるように、前にゼロを追加する必要があります。 00001 . までループします。 99999 のように、長さは5でなければならない。

00002 , 00042 , 00212 , 012312 といった具合です。

どうすればいいのでしょうか?

どのように解決するのですか?

しかし、このような場合、おそらく最も簡単なのは -f フラグを seq を使用すると、リストを出力する際に数字をフォーマットするようになります。 例えば

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

を実行すると、次のような出力が得られます。

00010
00011
00012
00013
00014
00015

より一般的に bash があります。 printf を内蔵しているので、以下のように出力をゼロで埋めることができます。

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

を使用することができます。 -v フラグを使用すると、出力を別の変数に格納することができます。

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

注目すべきは printf とは若干異なる形式をサポートしています。 seq を使用する必要があります。 %05d の代わりに %05g .