シェルスクリプトで桁あわせいろいろ
久しぶりに使う機会があったので、備忘として。
あと、以前、桁合わせにスクリプトでごにょごにょやってたけど、もっと簡単にできるので記載しておく。
シェルスクリプトによるファイルの間引き part2 - KuroNeko666’s blog
ゼロパディング(ゼロフィル)
桁合わせに、ゼロで埋める(パディング)、もしくはゼロで満たす(フィル)。
$ num=1 $ printf "%03d\n" $num
コマンドとしては printf を使う。
%d がデシマル(10進数)での表記。
それを 3 桁で表示。
不足する分はゼロで埋める。
なので、上記のコマンドは "001" が表示される。
最後に \n を入れているのは、改行を示したいから。
ゼロサプレス
数値の先頭ゼロを抑止(サプレス)して出力すること。
削除する場合と、ゼロをスペースに置換する場合の2種類。
スペース表示(1:数値の桁合わせ)
ゼロサプレスの方法その 1 は、ゼロパディングとやり方が同じ。
ただ 0 を指定しなければスペースが入るという。
$ num=1 $ printf "%3d\n" $num
表示としては " 1" なんだけど、わかりにくい。
シェルスクリプトで数値として扱うと、スペースは消えちゃう。
スペース表示(2:ゼロ置換)
次のゼロサプレスは、もともとある 0 をスペースで置換する方法。
$ num=$(printf "%03d" 1) $ echo ${num} | sed 's/0/ /g'
表示としては " 1" となる。
ゼロ削除
ついでに、ゼロを削除したい場合。
01月01日…とかを 1月1日 にしたいとかいう、ゼロを消したい場合に有効。
もちろん 2015年01月20日 を対象にすると 215年1月2日 になってしまうので、元データの書式には十分注意する。
$ num=$(printf "%03d" 1) $ echo ${num} | sed 's/0//g'
表示としては "1" になる。
いずれにしても、改行をさせたくないなら printf コマンドで変数を表示させ \n を付けなければ良い。
最初から桁数が分かっていて、bash で for 文などで利用する桁合わせなら、ブレース展開もアリかな。
echo {0..123}
こう書くと、0~123 まで出力される。
echo {00..123}
こう書くと、00~123 まで出力される。
echo {000..123}
これを書くと、000~123 まで出力される。
for ii in {000..125} do echo ${ii} done
こんな感じ。