Previous: factor invocation, Up: Numeric operations


25.2 seq: 数列を出力

seqは,数字の列を標準出力に出力します.概要です.

     seq [option]... last
     seq [option]... first last
     seq [option]... first increment last

seqは,firstからlastまでincrementおきに, 数字を出力します.デフォルトで,それぞれの数字は別々の行に出力されます. incrementが指定されていないとき,firstlastより大き いときでも,そのデフォルトは‘1’になります.firstのデフォル トも‘1’です.そのため,So seq 1は‘1’を出力しますが, seq 0seq 10 5では出力しません.(小数部の前にピリオドを 使用している)浮動小数点の数字を指定してもかまいません.

プログラムは以下のオプションを受け入れます.Common optionsも参照 してください.

-f format
--format=format
すべての数字をformatを使用して出力します.デフォルトは‘%g’ です.formatは,標準的な浮動小数点出力書式の,‘%e’, ‘%f’,または‘%g’の内,ただ一つだけを含んでいる必要があります.
-s string
--separator=string
数字をstringで分離します.デフォルトは改行です.出力は,常に改行 で終了します.
-w
--equal-width
すべての数字を同じ幅で出力し,ゼロを前置してパディングします.(他の種 類のパディングをするため,--formatを使用してください).

大きな整数値の列を出力するために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が負の場合は小さい) 値に指定して下さい.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.