Linuxで連番するおさらい
とにかく連番で出力させたい、っていうたわいもない話なんですが。
rubyやperlが使えれば、適当にワンライナー書けばいいんですけど..
$ ruby -e '(1..5).each {|n| printf("%05g\n",n)}' 00001 00002 00003 00004 00005
とはいえ、シェルでなんとかして、と言われることも多々あるので。
seq
やっぱりseqが便利ですね。
$ seq 5 1 2 3 4 5
組み合わせれば0パディングも余裕。まじ余裕。
$ seq 3 |\ > while read n > do > printf "%02g\n" $n > done 01 02 03
seqのオプションでもパディング。こっちの方がいいじゃないか。
# -w, --equal-width # 桁数を揃えるために (先頭を) 0 で埋める。 $ seq -w 5 10 05 06 07 08 09 10
フォーマット指定もできる。
# -f FORMAT, --format=FORMAT # printf(3) のフォーマットに FORMAT を用いる。(デフォルト: %g) $ seq -f "%010g.jpg" 5 10 0000000005.jpg 0000000006.jpg 0000000007.jpg 0000000008.jpg 0000000009.jpg 0000000010.jpg
区切りもできる。便利この上ない。
# -s SEP, --separator=SEP # 数値を SEP で区切る。(デフォルト: ‘\n’) $ seq -s ',' 5 10 5,6,7,8,9,10
bc
bcだって。でも使う理由がどう考えても見つからない。
$ bc -l -q for (i=1; i<=5; i++) { print i,"\n" } 1 2 3 4 5
cat
catで無理して頑張ってみるという方法も。
$ repeat 5 {echo ""} | cat -n 1 2 3 4 5