ようへいの日々精進XP

よかろうもん

seq コマンド (だけ) で 0 パディング

tl;dr

即興で 1 から 100 までの数字を用意する必要になった. しかも, すべての数字を 0 パディングしたい.

今までの俺

ググったりして seq コマンドが良さそうなことはわかっていたけど, 以下のように書いて満足していた.

for id in `seq 1 100`
do
  num=`printf %03d $id`
  echo $num
done

明日からの俺

qiita.com

上記の記事のコメント欄を見て目が醒めた.

for num in `seq -w 1 100`
do
  echo $num
done

seq --help すると, ちゃんと書かれている.

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"

$ seq --help

()

Mandatory arguments to long options are mandatory for short options too.
  -f, --format=FORMAT      use printf style floating-point FORMAT
  -s, --separator=STRING   use STRING to separate numbers (default: \n)
  -w, --equal-width        equalize width by padding with leading zeroes
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

()

これで OK. むしろ, for しなくても seq コマンドのオプションでかたがつく.

$ seq -w 1 100
001
002
003
...
098
099
100

最後に

man やヘルプを読みましょう.