.\" %FreeBSD: src/gnu/usr.bin/sort/sort.1,v 1.5.8.1 2001/07/22 11:01:34 dd Exp % .\" .\" $FreeBSD$ .TH SORT 1 "GNU Text Utilities" "FSF" \" -*- nroff -*- .SH 名称 sort \- テキストファイルを行でソートする .SH 書式 .B sort [\-cmus] [\-t separator] [\-o output-file] [\-T tempdir] [\-bdfiMnr] [+POS1 [\-POS2]] [\-k POS1[,POS2]] [file...] .br .B sort {\-\-help,\-\-version} .SH 解説 このマニュアルページは GNU 版の .B sort について書かれています。 .B sort は、file が指定されていればそのファイルから、 ファイルが指定されない場合は標準入力からデータを読み込み、 入力した各行について、ソートやマージや比較を行います。 ファイル名 `-' は標準入力を意味します。 .B sort はデフォルトでは標準出力に結果を書き出します。 .PP .B sort は、3 つの動作モードを持っています。 (デフォルトの) ソートと、マージと、ソートされているかどうかのチェックです。 以下のオプションで動作モードを変更します。 .TP .I \-c ファイルが既にソートされたものであるかどうかチェックします。 もし、ソートされてなければ、エラーメッセージを表示すると共に、 戻り値に 1 を返します。 .TP .I \-m 複数のファイルをひとまとまりしてソートすることで、 それらをマージします。 個々のファイルは、あらかじめソートしておかなければなりません。 ソートはいつでもマージの代わりに動きます。 マージのオプションがあるのは、単なるマージですむ場合には、 その方がずっと高速だからです。 .PP 入力行は次のようにして比較されます。 キーフィールドが指定されている時には、 .B sort は、違いが見つかるかキーフィールドがなくなるまで、 コマンド行で指定された順に、キーフィールド同士を、 関連づけられた順序オプションに従い比較します。 .PP もしグローバルオプション .I Mbdfinr のどれかが指定され、キーフィールドが指定されなければ、 .B sort はグローバルオプションにしたがって、行全体を比較します。 .PP すべてのキーが等しい場合 (または順序を指示するオプションが全く指定されていない場合) 、 .B sort は最終手段として、 そのマシンでの文字の照合順 (machine collating sequence) にしたがって、 各行をバイト毎に比較します。 この最終手段においては、 .I \-r オプションが有効です。 .I \-s (stable) オプションは、この最終手段の比較をやめて、 全てのキーフィールドが等しい行同士の相対的な出現順を保ちます。 キーフィールドやグローバルオプションを全く指定しない時には .I \-s は効果を持ちません。 .PP GNU .B sort には、入力行の長さの制限 (行に含まれるバイト数の制限) はありません。 また、入力ファイルの最後の 1 バイトが改行文字でない時には、 GNU .B sort は黙って改行文字を補って処理を行います。 .PP 環境変数 .B TMPDIR が設定されている場合、 .B sort は、デフォルトの /tmp の代わりに、 これを作業ファイルを置くディレクトリとして用います。 .I "\-T tempdir" オプションも作業ファイル用ディレクトリの指定に使えます。 この指定は環境変数よりも優先されます。 .PP 以下に示すオプションによって、出力行の順序付けを制御できます。 これらはグローバルに指定したり、特定のキーフィールドについて 指定することもできます。 キーフィールドを指定しない時には、 グローバルオプションは行全体の比較に適用されます。 キーフィールドを指定した時には、 それ固有の指定を持たないキーフィールドに グローバルオプションの動作が継承されます。 .TP .I \-b ソートキーを見つける時、先頭にある空白を無視します。 .TP .I \-d `電話帳順' でソートします。アルファベット、数字、空白以外の文字を無視します。 .TP .I \-f 英小文字は大文字に直してソートします。 例えば、`b' は `B' と同様にソートされます。 .TP .I \-i ASCII である 040〜0176 (8進、両端を含む) の範囲に含まれない 文字を無視します。 .TP .I \-M 行先頭にある、空白の後ろに月の英語名の略称が続いた文字列を、 大文字に変換した上で、 `JAN' < `FEB' < ... < `DEC' の順で比較します。 月の名称でない文字列は、月の名称の文字列より小さいと見なされます。 .TP .I \-n 行先頭にある数字列を、数値として比較します。 数字列は、空白 (オプション)、マイナス符号 (オプション)、 0 個以上の数字、小数点と 0 個以上の数字の組 (オプション) から構成されます。 .TP .I \-r 比較結果を逆にし、より大きなキー値を持つ行が出力で 先に出てくるようにします。 .PP その他のオプションは以下の通りです。 .TP .I "\-o output-file" 結果を標準出力の代わりに、 .I output-file に出力します。 .I output-file が入力ファイルの 1 つである場合、 .B sort はソートし結果を書き出す前に、 その入力ファイルを作業ファイルにコピーします。 .TP .I "\-t separator" 文字 .I separator を、各行でソートキーを決める時のフィールド区切りとします。 デフォルトでは、空白でない文字と空白文字の間でフィールドを区切ります。 例えば、` foo bar' という行は、` foo' と ` bar' という 2 つの フィールドに分けられます。 すなわち、入力行 ` foo bar' が与えられた場合、 .B sort は、この行をフィールド ` foo' と ` bar' に分割します。 フィールド区切りの文字は、その前のフィールドの一部と見なされず、また、 その後のフィールドの一部とも見なされません。 .TP .I \-u デフォルトの場合、および .I \-m オプションが指定された場合、比較して等しいとされた行のうち 最初の 1 行だけ出力し、後は出力しないようにします。 .I \-c オプションが指定された場合は、 同じ内容の行が連続しないことをチェックします。 .TP .I "+POS1 [\-POS2]" 行の中で、ソートのキーとして使うフィールドを指定します。 フィールドは、行の中で、位置 POS1 から始まり 位置 POS2 まで (POS2 は含まず) の部分からなります。 フィールドの位置と文字の位置は、ともに 0 から数え始めます。 .TP .I "\-k POS1[,POS2]" ソートキーを指定するもう 1 つの書式です。 フィールドの位置と文字の位置は、ともに 1 から数え始めます。 .PP 位置の指定は、\fIf\fP.\fIc\fP の形式を持ちます。 \fIf\fP はフィールド番号の指定であり、 \fIc\fP は、(\fI+pos\fPの場合) フィールドの先頭から数えた先頭文字の番号、 あるいは、 (\fI\-pos\fPの場合) 直前のフィールドの末尾から数えた先頭文字の番号の 指定です。 フィールド内の最初の文字を指定する場合には、.\fIc\fP の部分を 省略することができます。 .I \-b オプションが与えられた場合、フィールド指定の .\fIc\fP の部分は、 (\fI+pos\fPの場合) そのフィールド内の最初の非空白文字から、 あるいは、 (\fI\-pos\fPの場合) 直前のフィールドの後ろの最初の非空白文字から 数えた位置の指定になります。 .PP 引数 \fI+pos\fP や \fI-pos\fP には、オプション文字 .I Mbdfinr を後ろに付けることもできます。 その場合には、このフィールドにはグローバルな順序づけオプションは 適用されません。 .I \-b オプションは、\fI+pos\fP と \fI\-pos\fP のそれぞれに独立に 指定できますが、グローバルな指定が継承される場合には 両方に指定されたように働きます。 .I \-n または .I \-M オプションが指定された場合、 .I \-b オプションが暗黙のうちに指定されることになりますが、この .I \-b オプションは、キー指定の \fI+pos\fP と \fI\-pos\fP の両方に働きます。 キーは複数のフィールドに跨っても構いません。 .PP 上記に加え、 GNU .B sort が引数 1 個だけ付けて起動される時には、以下のオプションが 認識されます。 .TP .I "\-\-help" 標準出力に使い方のメッセージを表示して正常終了します。 .TP .I "\-\-version" 標準出力にバージョン情報を表示して正常終了します。 .SH 互換性 .B sort の歴史的な実装 (BSD や System V) とは、いくつかのオプション、特に .IR \-b , .IR \-f , .IR \-n 、 の解釈が異なります。 GNU sort は POSIX の動作に従いますが、その動作は、普通 (必ずではない) System V の動作と似ています。 POSIX によれば、 .I \-n は .I \-b を暗黙に指定しなくなりました。 整合性を取るために、 .I \-M も同じように変更されました。 この結果、あいまいな場合には、フィールド指定中の文字の位置の意味が 影響される場合があるかも知れません。 この問題にぶち当たったら、対応策は、明示的に .I \-b を指定することです。 .SH バグ .I \-k の有り無しによりフィールド番号の意味が異なるのは混乱の元です。 この件についてはすべて POSIX が悪いのです。