SORT(1)

名前
sort - テキストファイルの行をソートする

書式
sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[,POS2]] [file...]
sort {--help,--version}

説明
この文書はもうメンテナンスされていないので、不正確・不完全 な可能性がある。現在は texinfo 文書が正式な情報となっている。

このマニュアルページは GNU 版 sort について記述したものである。 sort は指定されたファイルの行をソート、マージ、比較する。ファイル名が与えら れなかった場合は標準入力を読み込む。ファイル名 `-' は標準入力を意味す る。デフォルトでは sort は結果を標準出力に書き出す。

sort には 3 種類の動作モードがある。ソート (デフォルトの動作)、マージ、ソー トされているかのチェックである。以下のオプションで動作モードを変更する。

-c  与えられたファイルがすでにソートされているかどうかをチェックする。ソー トされていないものがあった場合は、エラーメッセージを表示して戻り値に 1 を返す。

-m  与えられたファイル群をまとめてソートしてマージする。入力ファイルは事前 にそれぞれソートされていなければならない。マージ動作ではなく、ソート動 作を複数ファイルにまとめて行うことも可能である。マージ動作が提供されて いるのは、こちらの方が高速だからである。

行のペアは以下のように比較される。キーフィールドが指定されている場合は、 sort は順序オプション (ordering option) によってコマンドラインから指定され た順に、それぞれの行からのフィールドを比較する。比較動作は違いを発見す るか全てのフィールドを尽くすまで継続される。

グローバルオプション Mbdfinr のうちのどれかが与えられていて、キーフィールドが指定されなかった場合は、 sort はグローバルオプションの指定の下に、行全体を比較する。

もし全てのキーが等しければ (または順序オプションの指定が全くなければ)、 sort は最終ソート (last-resort) として、マシンで定義されている順序で行を 1 バイトずつ比較する。 最終ソートによる比較はグローバルオプション -r にはそのまま適用される。 -s (stable) オプションはこの最終ソートの比較を行わない。したがって全ての フィールドが等しかった行の間では、入力ファイルの順序が保存される。フィー ルドやグローバルオプションが指定されなかった場合は -s は効果を持たない。

GNU sort には入力ファイルの大きさや行の長さに関する制限はない。さらに入力ファイ ルの最終バイトが改行 (newline) である必要もない。 GNU sort は黙って newline を追加する。

環境変数 TMPDIR が設定されている場合、 sort は一時ファイルの置き場所として、デフォルトの /tmp の代わりにそのディレ クトリを用いる。オプション -T tempdir でも一時ファイルを置くディレクトリを指定できる。オプションは環境変数 より優先される。

以下のオプションは出力行の順序に影響する。これらはグローバルにも、また 特定のキーフィールドのみに対しても指定できる。キーフィールドが指定され ていない場合は、グローバルオプションは行全体の比較に対して適用される。 指定されている場合は、グローバルオプションは、特にオプション指定のない キーフィールドに継承される。

-b  各行の比較の際に、行頭の空白を無視する。

-d  「電話帳」順でソートする。アルファベット、数字、空白以外のキャラクタを すべて無視する。

-f  ソートの際に、小文字を対応する大文字と同じに扱う。例えば `b' は `B' と 同じにソートされる。

-i  ASCII コードの範囲である 040 以上 0176 以下 (8 進数) に含まれない文字 を無視する。

-M  行頭の空白文字をすべて無視して、最初に現われた 3 文字を、月の名称の省 略形とみなして、 `JAN' < `FEB' < ... < `DEC' の順でソートする。小文字 は大文字と同じに扱われる。月の名称にない文字列は、より低位であるとみな される。

-n  先頭の文字列 (空白が前置されていても良い) を数値文字列として比較す る。数値文字列は、先頭の - 符号 (なくても良い)、 0 桁以上の数字、 そして小数点と 0 桁以上の数字 (なくても良い) からなる。

-r  比較の結果を逆順にする。より大きなキー値を持つ行が、より早く現われるよ うになる。

他のオプションは以下の通り:

-o output-file
    出力先を標準出力から output-file に変更する。 output-file が入力ファイルのどれかひとつだった場合、 sort はその入力ファイルを一時ファイルにコピーしてからソートと output-file への出力を行う。

-t separator
    各行からソートキーを検索する際、文字 separator をフィールドのセパレーターにする。デフォルトでは、フィールドは空白以外 の文字と空白文字の間の空文字列 (empty string) によって分離される。例え ば入力行として ` foo bar' が与えられた場合、 sort はこの行をフィールド ` foo' と ` bar' に分離する。フィールドセパレーター は、その前後のフィールドには含まれないものとされる。

-u  デフォルトの動作、または -m オプションの動作では、等しいとされた行のうちの最初のものだけを表示する。 -c オプションの動作では、連続した行で等しいものがないかどうかをチェックす る。

+POS1 [-POS2]
    各行でソートキーとして用いるフィールドを指定する。 POS1 から POS2 の直前の部分 (POS2 が与えられなかった場合は行末まで) がフィールド となる。フィールドと文字位置は 0 から始まる。

-k POS1[,POS2]
    ソートキーを指定する別法。フィールドと文字位置は 1 から始まる。

位置の指定は f.c という書式で行う。 f は用いるフィー ルドの番号、 c は先頭文字の番号で、 +pos の場合はフィール ドの先頭から、-pos の場合は直前のフィールドの最後から数える。 .c の部分は省略でき、その場合はフィールドの先頭の文字となる。 -b オプションが指定された場合の .c の起点は、 +pos ならフィー ルドに最初に現われた空白以外の文字となり、 -pos なら直前のフィー ルド以降に最初に現われた空白以外の文字となる。

+pos や -pos 引き数にはオプション文字 Mbdfinr を付加することができる。この場合、そのフィールドにはグローバルな順序オ プションは適用されなくなる。 -b オプションは +pos 及び -pos の片方にも両方にも指定でき、 グローバルオプションから継承された場合は両方に適用される。 -n または -M オプションが指定された場合には、 -b が暗黙に指定されたとみなされ、 -b がキー指定の +pos と -pos の両方に適用される。キーは複数 のフィールドにまたがっていても構わない。

以上に加えて、 GNU sort が引き数ひとつで起動された場合には、以下のオプションも認識される:

--help
    使い方に関するメッセージを標準出力に表示し、実行成功を返して終了する。

--version
    バージョン情報を標準出力に表示して終了する。

移植性

sort の歴史的な (BSD や System V の) 実装では、いくつかのオプションの解釈に 差異があった。典型的なものとしては -b, -f, -n などを挙げることができる。 GNU sort は POSIX で指定されているように動作する。これはだいたい System V (すべてではない!) での動作に似ている。 POSIX によれば、 今後は -n は -b を伴わない。 一貫させるため、 -M も同様に変更されている。これはフィールド指定が明確でない場合には、文字 位置の解釈に影響してしまうかもしれない。これが問題になる場合は、明示的 に -b を加えれば良い。

バグ
-k が使われるかどうかによってフィールド番号の意味が異なってしまうのは混乱 のもとである。これは POSIX が悪いんだよ!