seq [option]... last seq [option]... first last seq [option]... first increment last
seqは,firstからlastまでincrementおきに,
数字を出力します.デフォルトで,それぞれの数字は別々の行に出力されます.
incrementが指定されていないとき,firstがlastより大き
いときでも,そのデフォルトは‘1’になります.firstのデフォル
トも‘1’です.そのため,So seq 1
は‘1’を出力しますが,
seq 0
とseq 10 5
では出力しません.(小数部の前にピリオドを
使用している)浮動小数点の数字を指定してもかまいません.
プログラムは以下のオプションを受け入れます.Common optionsも参照 してください.
大きな整数値の列を出力するためにseqを使用したい場合,精度が 悪くなるのでデフォルトの‘%g’書式を使用しないで下さい.
$ seq 1000000 1000001 1e+06 1e+06
代わりに,指数も十進数の点も使用せずに十進数を出力するため,書式 ‘%1.f’を使用することが可能です.
$ seq --format=%1.f 1000000 1000001 1000000 1000001
16進数で出力したい場合,変換を実行するためにprintfを使用する ことが可能です.
$ printf %x'\n' `seq -f %1.f 1048575 1024 1050623` fffff 1003ff 1007ff
非常に長い数字のリストに対しては,引数リストの長さにおけるシステムの制 限を避けるためxargsを使用して下さい.
$ seq -f %1.f 1000000 | xargs printf %x'\n' | tail -n 3 f423e f423f f4240
八進数を生成するために,%x
の代わりにprintfの%o
書式を使用して下さい.しかし,printfの使用は2^32
未満
の整数でのみ動作することに注意して下さい.
$ printf "%x\n" `seq -f %1.f 4294967295 4294967296` ffffffff bash: printf: 4294967296: Numerical result out of range
ほとんどのシステムで,seqは最大2^53
まで値ですべての数
字を生成することが可能なので,そのような大きな数をより強固に生成するた
めに,基数変換のより一般的な手法として以下のものがあります.それは,
bc
を使用し,出力の基数の値を設定することで動作し,以下では16進
数の出力を行なう状況として,obaseを‘16’にしています.
$ (echo obase=16; seq -f %1.f 4294967295 4294967296)|bc FFFFFFFF 100000000
seqを小数のincrementで使用しているとき注意しないと,びっ
くりするような結果になる可能性があります.以下の例では,最後の値が
0.3
になることを,ほとんどの人が期待するでしょう.
$ seq -s' ' 0 .1 .3 0 0.1 0.2
しかし,seqが二進数の浮動小数点(Cのdouble
型)で計算し
ているため,ほとんどのシステムでそうはなりません – つまり,十進数の
.1
は正確に表現できないことを意味します.つまり,.1 * 3 > .3
のような非直観的な条件式が,結局は正しいということを意味していま
す.
上記の例を回避するため,lastの値にちょっと大きい数字を使用して下 さい.
$ seq -s' ' 0 .1 .31 0 0.1 0.2 0.3
一般的に,小数部分でincrementを使用しているとき,そして (last - first) / incrementが(数学的に)整数であっても lastが確実にseqで出力される最終値になるように, lastの値をわずかに大きい(またはincrementが負の場合は小さい) 値に指定して下さい.
終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.