[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3 seq: 数列を表示する

seq は、数列を標準出力に表示する。

書式:

 
seq [option]… last
seq [option]… first last
seq [option]… first increment last

seq は、first から last までの数を increment おきに表示する。 デフォルトでは、それぞれの数は 1 行に 1 個づつ表示される。 increment が指定されていない場合は、firstlast より大きい場合でも、デフォルトの ‘1’ が increment として使用される。 first のデフォルトもまた ‘1’ である。 従って、seq 1 は ‘1’ を表示するが、seq 0seq 10 5 は、何も出力しない。数列が終了するのは、現在の数値に increment を加えたら last より大きくなってしまう時点である。だから、seq 1 10 10 は、‘1’ しか表示しない。increment の値には ‘0’ を指定できない。 同じ数を繰り返し出力したかったら、yes を使うべきである。また、first, increment, last の値は、NaN (訳注: Not a Number) であってはならない。数値には浮動小数点数を指定することもできる。 See section 浮動小数点数.

このプログラムでは以下のオプションが使用できる。参照: 共通オプション. オプションはオペランドの前に置かなければならない。

-f format
--format=format

すべての数を format を使用して表示する。format は、 ‘printf’ 形式の浮動小数点数の変換指定をただ一つ含むものでなければならない。 すなわち、‘%a’, ‘%e’, ‘%f’, ‘%g’, ‘%A’, ‘%E’, ‘%F’, ‘%G’ のいづれかである。 ‘%’ の後ろには 0 個以上のフラグを、‘-+#0 '’ のうちから選んで置くことができる。 また、それに続けて、1 個以上の数字からなるフィールド幅を指定することもできるし、 さらにその後ろに、‘.’ とそれに続く 0 個以上の数字からなる精度を指定することもできる。 format には、任意の数の ‘%%’ 変換指定が含まれていてもよい。 変換指定はすべて、‘printf’ の場合と同じ意味を持っている。

デフォルトの表示形式は、first, increment, last がどういう表記を使用しているかよって決まる。そのすべてが固定小数点の 10 進数表記を使用しているならば、デフォルトの表示形式は ‘%.pf’ になる。 この p には、出力する数値を過不足なく表現できる最小の精度が来る。 それ以外の場合、デフォルトの表示形式は ‘%g’ になる。

-s string
--separator=string

数の区切りに string を使う。デフォルトは改行である。出力の最後には、必ず改行が付く。

-w
--equal-width

すべての数を同じ桁数で表示する。先頭の空きは 0 で埋める。first, increment, last は、すべて固定小数点の 10 進数表記でなければならない (他のやり方で先頭を埋めたければ、‘--format’ を使うこと)。

-f’ オプションを使えば、出力をもっときめ細かく制御することができる。

 
$ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6
(-9.00E+05)
( 2.00E+05)
( 1.30E+06)

出力を 16 進数の整数にしたかったら、printf を使って変換すればよい。

 
$ printf '%x\n' $(seq 1048575 1024 1050623)
fffff
1003ff
1007ff

数のリストが非常に長くなる場合は、xargs を使用すると、引数リストの長さに対するシステムの制限を回避することができる。

 
$ seq 1000000 | xargs printf '%x\n' | tail -n 3
f423e
f423f
f4240

8 進数の出力を生成するには、printf に対して %x の代わりに、%o フォーマットを使用すればよい。

ほとんどのシステムで seq は、少なくとも 2^53 までの数値に対して整数の出力を生成することができる。それより大きい整数に対しては概算になる。 細かい点は、ご使用のシステムの浮動小数点の実装によって異なっている。 See section 浮動小数点数. seq2^64 までの整数に対してなら、きちんと動作するが、 それより大きな整数に対しては、数値が不正確になることがあるというのは、よくある話である。

 
$ seq 50000000000000000000 2 50000000000000000004
50000000000000000000
50000000000000000000
50000000000000000004

とは言え、負ではない整数を対象とし、インクリメントが 1 で、 フォーマット指定オプションはないという条件の元では、 seq は任意の大きな数値を表示できることも心に留めておいていただきたい。

seq でとんでもなく大きな桁の値を扱うときは、気をつけた方がよい。 さもないと、seq は内部で浮動小数点を使用しているので、結果を見てびっくりするかもしれない。 たとえば、x86 のプラットフォームでは、内部表現が 64 ビットの仮数部を使用しているが、 そこで次のコマンドを実行すると、

 
seq 1 0.0000000000000000001 1.0000000000000000009

seq は 1.0000000000000000007 を二度出力し、1.0000000000000000008 をスキップする (訳注: 訳者の amd64 環境では、1.0000000000000000008 ではなく、1.0000000000000000006 をスキップする)。

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on March 31, 2018 using texi2html 1.82.