Bashシェルスクリプトでゼロ埋め(ゼロパディング)文字列を生成する方法いろいろ
はじめに
シェルスクリプト(Bash)で 数字の頭を 0 で詰めて、桁数を調整 したいことがよくあります。
ゼロ埋め、ゼロパディング、ゼロフィル、ゼロ詰めなどいろいろな呼び方をされます。
シェルスクリプトで実現する場合のいくつかの方法と使用例をまとめてみます。
検証環境
printf
コマンドを使う
セオリーというか、多くのプログラミング言語に搭載されている機能。
Bash組み込みコマンドの printf
を使う方法があります。
出力フォーマットを指定することで、何桁の数値文字列として出力するか制御できます。
Bashの変数参照機能を使う
Bashの変数参照時に、不要な箇所を切り取ることができます。
※一度変数に代入しないといけないのが残念です。
連続したゼロ埋め数値を生成したい場合
ゼロ埋めした数値文字列は多くの場合、連続した値を処理するときに利用されます。
連続したゼロ埋め数値を生成する方法もいくつかあります。
for
ループを使う
for
ループと printf
を組み合わせて実現できます。
printf
とワイルドカード展開を使う
printf
は、書式(%03d
の部分)よりも引数の数が多い場合、書式が繰り返し使用されることによって全ての引数が出力されます。
seq
コマンドのオプションを使う
seq コマンド自身にもゼロ埋めに利用できるオプションがあります。-f
オプションで、出力時のフォーマットを指定できます。
先の例のように、1から5の数値をゼロ埋めしてみます。
(もっと簡単)ワイルドカード展開だけ使う
ワイルドカード展開だけでも実現可能です。
これ、2桁や3桁になっても正常に動作するのか?という不安があったので試してみました。
$ echo {001..050}
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050
正常に動作していますね。
ひとこと
ワイルドカード展開、あまり使ったことがないのですが便利ですね。
ディスカッション
コメント一覧
まだ、コメントがありません