お茶漬けぶろぐ

bashでゼロパディングする手法2つ

連番を頭につけたファイル群を取り扱う時、並び順を考えるとゼロパディングしておきたくなる。

例えばソートしたときに、

1 10 11 ~略~ 2 20 21 ~略~

みたいな事されると、理想の並び順ではない。理想は勿論、

1 2 ~略~ 10 11 ~略~

というような状況。最大桁数をカバー出来る桁数でゼロパディングしておけばこういう事故も起こらないはず…

という訳でゼロパディングする手法2つ。

話を簡単にするために8~12の5つを作ってみる。

その1

[bash]
$ for ((i=8; i<13; i++));do
str=00$i;
str=${str:(-3)};
echo $str;
done
008
009
010
011
012
[/bash]

2行目では008~0012までを単純に作る。後にこれを${str:(-3)}で、末尾から3文字だけ取り出す事によってゼロパディングをする。

その2

[bash]
$ for ((i=8; i<13; i++));do
str=printf "%03d" ${i};
echo $str;
done
008
009
010
011
012
[/bash]

C言語のprintfでゼロパディングするときと同じ感覚。

その1の方がすっきりと言えばすっきりだけど、2行にまたがるのが微妙な気持ち(1行にまとめる方法は勿論ありそうだけど)

その2なら新たな記法を覚えなくて済むし簡単に1行にまとまるから良い…けれどbashで、という気持ちのくせになぁ、みたいな…そもそもforの中身がCスタイルなんですけど。

< あけましておめでとうございます(今更)

マルチプロセスとマルチスレッドの区別 >