EN JA
SORT(1)
SORT(1) FreeBSD General Commands Manual SORT(1)

名称

sortテキストとバイナリファイルのレコード (行) をソートするか、またはマージする

書式

sort [ -bcCdfghiRMmnrsuVz][ -k field1[ , field2]][ -S  memsize][ -T dir][ -t char][ -o output][ file ...]

sort --help

sort --version

解説

sort ユーティリティは、行ごとに、テキストとバイナリファイルをソートします。行は、改行 (デフォルト) またはヌル´\0´文字 (-z オプション) によって後くレコードから分離されたレコードです。レコードは、あらゆる印刷可能または印刷不可能な文字を含むことができます。比較は、入力の各行から抽出された 1 つ以上のソートキーに基づき、現在のロケールの照合する規則と実際のソートの振る舞いを調整することができる指定されたコマンド行のオプションにしたがって、辞書編集的に行なわれます。デフォルトで、キーが与えられないなら、 sort は、比較のためにすべての行を使用します。

コマンド行オプションは、次の通りです:

-c, - -check, -C, - -check=silent|quiet
単一の入力ファイルがソートされることをチェックします。ファイルがソートされていないなら、 sort は、適切なエラーメッセージを生成して、コード 1 で終了し、そうでなければ、0 を返します。 -C または - -check=silent が指定されるなら、 sort は、出力を生成しません。これは、 -c の "サイレント"バージョンです。
-m, - -merge
マージのみ。入力ファイルは、前もってソートされていると仮定されます。それらがソートされていないなら、出力の順序は、不確定です。
-o output, - -output= output
標準出力の代わりに output ファイルに出力を印刷します。
-S size, - -buffer-size= size
メモリバッファの最大サイズのために size を使用します。サイズの修飾子 %、b、K、M、G、T、P、E、Z、Y を使用することができます。メモリの制限が明白に指定されないなら、 sort は、利用可能なメモリの約 90% まで取り上げます。ファイルサイズがメモリバッファに入れるには大きすぎるなら、一時的なディスクファイルがソートを行なうために使用されます。
-T dir, - -temporary-directory= dir
ディレクトリ dir に一時的なファイルを格納します。デフォルトのパスは、環境変数 TMPDIR の値、または TMPDIR が定義されていないなら、 /var/tmp です。
-u, - -unique
ユニークなキー。既に処理されたものと等しいキーがあるすべての行を抑制します。このオプションは、 -s と同様にステーブル (stable) ソートの意味を含みます。 -c または -C とともに使用されるなら、 sort は、重複したキーがある行ががないこともチェックします。
-s
ステーブル (stable) ソート。このオプションは、所有しているレコードと等しいキーのオリジナルのレコードの順序を維持します。これは、非標準の機能ですが、広く受け入れられて、使用されています。
- -version
バージョンを印刷して、静かに終了します。
- -help
ヘルプテキストを印刷して、静かに終了します。

次のオプションは、デフォルトの順序の規則を上書きします。順序のオプションがキーフィールドの指定と無関係に現われるとき、それらは、すべてのソートキーに全体的に適応します。特定のキー ( -k を参照) にアタッチされるとき、順序オプションは、それらがアタッチされるキーに対するすべての全体的な順序オプションを上書きします。

-b, - -ignore-leading-blanks
行を比較するとき、先導する空白文字を無視します。
-d, - -dictionary-order
比較において空白類と英数字文字のみを考慮します。
-f, - -ignore-case
比較の前に、すべての小文字をそれらの大文字の等しい物に変換します、すなわち、大文字と小文字を区別しないソートを実行します。
-g, - -general-numeric-sort, - -sort=general-numeric
一般的な数値によってソートします。 -n に反対するものとして、このオプションは、 -n によって許可されたものより多くの自由な形式ありますが、著しい性能上の欠点がある、一般的な浮動小数点を扱います。
-h, - -human-numeric-sort, - -sort=human-numeric
数値によってソートしますが、存在するなら、SI 接尾辞を考慮に入れます。最初に数値の符号 (負、0 または正) によってソートします。次に、SI 接尾辞 (空、または `k' または `K'、または `MGTPEZY' の 1 つ、その順序のいずれか) によってソートします。そして、最後に数値によってソートします。 SI 接尾辞は、数値の直後に続かなければなりません。例えば、M は、K より "大きい"ので、'12345K' は、'1M' の前にソートします。このソートオプションは、(人間に読み込み可能な) -h または -H オプションで 'df' コマンドの単一の起動の出力をソートするために役に立ちます。
-i, - -ignore-nonprinting
すべての非印刷可能文字を無視します。
-M, - -month-sort, - -sort=month
英語の月の名前の略語によってソートします。未知の文字列は、月の名前より小さいと見なされます。
-n, - -numeric-sort, - -sort=numeric
算術演算の値によって数値的なフィールドをソートします。フィールドは、最初に省略可能な空白、省略可能なマイナス記号、 (小数点とあり得る 1000 毎の分離記号を含んで) 0 以上の数値があることになっています。
-R, - -random-sort, - -sort=random
ランダムな順序でソートします。これは、等しいキーがともにソートすることを除いて、入力のランダムな置換です。それは、入力キーをハッシュして、ハッシュ値をソートすることによって実装されています。ハッシュ関数は、ランダムに選択されます。ハッシュ関数は、 /dev/random の内容、または - -random-source によって指定されるなら、ファイル内容によってランダム化されます。たとえ複数のソートフィールドが指定されたとしても、同じランダムハッシュ関数は、それらのすべてに対して使用されます。
-r, - -reverse
逆の順序でソートします。
-V, - -version-sort
ソートのバージョン番号。入力行は、形式 PREFIX VERSION SUFFIX のファイル名として扱われます、ここで、 SUFFIX は、正規表現 "(.([A-Za-z~][A-Za-z0-9~]*)?)*"とマッチします。ファイルは、それらの接頭辞とバージョン (先導する 0 は、バージョン番号で無視されます、下記の使用例を参照してください) によって比較されます。入力文字列がパターンにマッチしないなら、それは、バイト比較関数を使用して比較されます。すべての文字列の比較は、C ロケールで実行されます、ロケール環境設定は、無視されます。
使用例:
$ ls sort* | sort -V
sort-1.022.tgz
sort-1.23.tgz
sort-1.23.1.tgz
sort-1.024.tgz
sort-1.024.003.
sort-1.024.003.tgz
sort-1.024.07.tgz
sort-1.024.009.tgz

これらのオプションを使用してフィールド分離記号の処理を変更することができます:

-b, - -ignore-leading-blanks
制限されたソートキーの開始と終りを決定するとき、先導する空白を無視します ( -k を参照)。最初の -k オプションの前に -b が指定されるなら、すべてのキーの指定に全体的に適用します。そうでなければ、キーの指定の各 field 引数に独立に -b をアタッチすることができます。
-k  field1[ , field2, --key= field1[ , field2]]
キーフィールドの開始位置 field1 と省略可能な終了位置 field2 がある制限されたソートキーを定義します。 -k オプションは、複数回指定できます、その場合に、前のキーが等しいとき、後のキーが比較されます。 -k オプションは、古いオプション + pos1- pos2 を置き換えますが、古い表記法もサポートされています。
-t char, - -field-separator= char
フィールド分離記号文字として char を使用します。最初の char は、キーオフセットを決定するとき、フィールドの一部であると見なされません。 char のそれぞれの発生は、重要です (例えば、“ charchar”は、空のフィールドを区切ります)。 -t が指定されないなら、デフォルトのフィールド分離記号は、空白類文字のシーケンスで、連続する空白類は、空のフィールドを区切り ません、しかしながら、最初の空白類 、キーのオフセットを決定するとき、フィールドの一部と見なされます。フィールド分離記号として NUL (ヌル文字) を使用するためには、 -t ´\0´を使用します。
-z, - -zero-terminated
レコード分離記号として NUL (ヌル文字) を使用します。デフォルトで、ファイル中のレコードは、改行文字によって分離されることになっています。このオプションで、NUL (´\0´) は、レコード分離記号文字として使用されます。

他のオプションは、次の通りです:

- -batch-size= num
sort によって同時にオープンすることができるファイルの最大数を指定します。このオプションは、多くの入力ファイルがあるか、または一時ファイルを使用するとき、振る舞いに影響します。デフォルト値は、16 です。
- -compress-program= PROGRAM
一時ファイルを圧縮するために PROGRAM を使用します。 PROGRAM は、引数なしで呼び出されるとき、標準入力を標準出力に圧縮しなければなりません。引数 -d を付けて呼び出されるとき、標準入力を標準出力に圧縮復元しなければなりません。 PROGRAM が失敗するなら、 sort は、エラーで終了しなければなりません。ここで使用することができる PROGRAM の 1 つの例は、bzip2 です。
- -random-source= filename
ランダムソートでは、ファイル内容は、ハッシュ関数の選択のために 'シード' (種) データのソースとしてに使用されます。同じシードデータがあるランダムソートの 2 つの呼び出しは、同じハッシュ関数を使用し、また、入力が同一であるなら、同じ結果を生成します。デフォルトで、ファイル /dev/random が使用されます。
- -debug
標準出力にソートするプロセスに関するある特別の情報を印刷します。
- -files0-from= filename
ファイル filename から入力ファイルリストを取ります。ファイル名は、(コマンド "find ... -print0"によって生成された出力のような) NUL (ヌル文字) によって分離されなければなりません。
- -radixsort
ソート仕様書が許可するなら、ラディクス (radix) ソートを使用しようとします。ラディクスソートは、普通のロケール (C と POSIX) のためだけに使用することができ、それは、数値または月のソートのために使用することができません。ラディクスソートは、非常に速く安定しています。
- -mergesort
マージソートを使用します。これは、常に使用することができる一般的なアルゴリズムですが、必ずしも最も速いとは限りません。
- -qsort
ソート仕様書が許可するなら、クイックソートを使用しようとします。このソートアルゴリズムは、 -u-s とともに使用することができません。
- -heapsort
ソート仕様書が許可するなら、ヒープ (heap) ソートを使用しようとします。このソートアルゴリズムは、 -u-s とともに使用することができません。
- -mmap
ファイルメモリマッピングのシステム呼び出しを使用することを試みます。ある場合には、速度を増加させるかもしれません。

次のオペランドが利用可能です:

file
ソートされるか、マージされるか、またはチェックされるファイルのパス名。 file オペランドが指定されないなら、または file オペランドが - であるなら、標準入力が使用されます。

フィールドは、フィールド分離記号とレコード分離記号 (デフォルトで改行) 以外の文字の最大のシーケンスとして定義されます。最初の空白類は、 -b が指定されていないなら、フィールドに含まれます。フィールド分離記号として振る舞う、空白類のシーケンスの最初の空白類は、 ( -t が指定されなければ) 含まれます。例えば、行の始まりのすべての空白類は、最初のフィールドの一部であると見なされます。

フィールドは、 -k field1[ , field2]コマンド行オプションによって指定されます。 field2 がないなら、キーの終りは、行の終りをデフォルトとします。

引数 field1field2 には、形式 m.n (m,n > 0) があり、上記で論じされたオプションに対応する、修飾子 b, d, f, i, n, g, Mr の 1 つ以上を続けることができます。 b が指定されるとき、修飾子の残りが field1 または field2 または両方でのみ指定されるなら、すべてのキーフィールドにかかわらずそれらが適用する間に指定されるところで、 field1 または field2 でのみ適応します。 m.n によって指定された field1 の位置は、 m 番目のフィールドの始めから n 番目の文字として解釈されます。 field1.n がないことは、 m 番目のフィールドの最初の文字を示す、‘ .1’を意味します。 -b オプションが有効であるなら、 n は、 m 番目のフィールドの最初の非空白文字から数えられます。 m.1b は、 m 番目のフィールドの最初の非空白文字を参照します。 1. n は、行の始めから n 番目の文字を参照します。 n が行の長さより大きいなら、フィールドは、空となるように取られます。

n 番目の位置は、たとえフィールドが指定された位置の数より短くても、フィールドの始めから常に数えられます。したがって、キーは、実際に後のフィールドの位置から開始することができます。

m.n によって指定された field2 位置は、 m 番目のフィールドの始めから (分離記号をを含む) nth 番目の文字として解釈されます。 .n がなければ、 m 番目のフィールドの最後の文字を示します。 m = 0 は、行の終りを指定します。したがって、オプション -k v.x,w.y は、古いオプション +v-1.x-1 -w-1.y と同義語です。 y が省略されたとき、 -k v.x,w は、 +v-1.x-1 -w.0 と同義語です。古い +pos1 -pos2 オプションは、 -k 同等物がない -w.0b を除いて、まだサポートされています。

環境変数

LC_COLLATE
レコードのソートのための照合を決定するために使用されるロケール設定。
LC_CTYPE
文字の大文字小文字変換と分類のために使用されるロケール設定、すなわち、その文字は、空白類その他と見なされます。
LC_MESSAGES
sort が印刷する、出力メッセージの言語を決定するロケール設定。
LC_NUMERIC
数値ソートで使用される数値の書式を決定するロケール設定。
LC_TIME
月のソートで使用される月の書式を決定するロケール設定。
LC_ALL
上記のロケール設定のすべてを上書きするロケール設定。すべてのこれらの設定を一度に同じ値に設定するために、この環境変数を使用することができます。
LANG
それぞれの環境変数も LC_ALL も設定されていないなら、異なる種類のロケール特有の振る舞いを決定するための最後の手段として使用されます。
NLSPATH
NLS カタログへのパス。
TMPDIR
一時ファイルが格納されるディレクトリへのパス。 TMPDIR-T オプションによって上書きされることに注意してください。
GNUSORT_NUMERIC_COMPATIBILITY
定義されるなら、 -t は、ロケール数字記号、すなわち、1000 の分離記号と 10 進数の分離記号、を上書きしません。デフォルトで、1000 の分離記号または小数点と同じシンボルで -t を指定するなら、シンボルは、フィールド分離記号として扱われます。古い振る舞いは、それほど明確ではありませんでした。シンボルは、フィールド分離記号と数値分離記号の両方として同時に扱われていました。この環境変数は、古い振る舞いを有効にします。

関連ファイル

/var/tmp/.bsdsort.PID.*
一時ファイル。
/dev/random
ランダムソートのためのデフォルトのシード (種) ファイル。

終了ステータス

sort ユーティリティは、次の値のうちの 1 つで終了します:

0
入力ファイルのソートが成功したか、または -c または -C とともに使用されるなら、入力ファイルは、既にソートする基準を満たしていました。
1
-c または -C オプションでソートされていない (または、一意性なし)。
2
エラーが生じました。

関連項目

comm(1), join(1), uniq(1)

規格

sort ユーティリティは、 IEEE Std 1003.1-2008 (“POSIX.1”) 仕様に準拠しています。

フラグ[ -ghRMSsTVz]は、POSIX 仕様の拡張です。

すべての長いオプションは、仕様に対する拡張で、それらのいくつかは、GNU バージョンとの互換性のために提供され、それらのいくつかは、自分自身の拡張です。

古いキーの記法 +pos1-pos2 は、 sort の古いバージョンに由来し、まだサポートされていますが、それらの使用は、まったく推奨されません。

歴史

sort コマンドは、 Version 3 AT&T UNIX ではじめて登場しました。

作者

Gabor Kovesdan <gabor@FreeBSD.org>,

Oleg Moskalenko <mom040267@gmail.com>

sort の、この実装には、(利用可能なメモリによって課されるもの以外の) 入力行の長さ、または行の内で許可されたバイトでどんな制限もありません。

その性能は、ロケール設定、ソートキーの効率的な選択とキーの複雑さに高度に依存します。最も速いソートは、オプション -s とともに全体の行でロケール C があることです。一般的に、ロケール C は、最も速く、次に単一のバイトのロケールが続き、そして最も遅いものとしてのマルチバイトのロケールですが、正確な照合順序は、常に尊重されます。キーの仕様に関しては、行を処理するためにより単純に、より速い検索は。訳注: 原文がおかしいので正確に翻訳できません。

算術演算の値によってソートするとき、 -n を使用することは、 -g より性能がよくなるので、可能な場合はいつでも、その使用が、推奨されます。

July 3, 2012 FreeBSD