sort コマンド
目的
ファイルをソートしたり、既にソートされているファイルをマージしたり、ファイルを検査してソートされているかどうかを判別します。
構文
sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m ] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] ] ... [ -k KeyDefinition ] ... [ File ... ]
説明
sort コマンドは、File パラメーターで指定されたファイル内の行をソートし、その結果を標準出力へ書き出します。 File パラメーターが複数のファイルを指定する場合、sort コマンドはそれらのファイルを連結し、1 つのファイルとしてソートします。 ファイル名の代わりに - (負符号 (-)) を使用すると、標準入力が指定されます。 ファイル名を何も指定しないと、コマンドは標準入力をソートします。 出力ファイルは -o フラグで指定できます。
フラグが何も指定されないと、sort コマンドは、現行ロケールの照合順序に基づいて入力ファイルの行全体をソートします。
ソート・キー
ソート・キーは、フィールド番号と桁番号で指定された入力行の一部分です。 フィールドは、フィールド・セパレーターで区切られた入力行の一部です。 デフォルトのフィールド・セパレーターは、1 つ以上の連続するブランク文字です。 しかし、これらのブランク文字は、ソート目的では以下のフィールドの一部と見なされます。 -b オプションを指定すると、これらの先行ブランク文字を無視できます。 -t フラグを使用して、別のフィールド・セパレーターを指定することもできます。 C 言語および英語のロケールの場合は、タブおよびスペース文字がブランク文字となります。
ソート・キーを使用する場合、sort コマンドはまず、最初のソート・キーの内容に基づいてすべての行をソートします。 次に、最初のソート・キーと等しいすべての行が、2 番目のソート・キーの内容に基づいてソートされます。 このようにして次々にソートされます。ソート・キーは、コマンド・ラインに先に現れた順序で番号付けされます。 2 つの行がすべてのソート・キーに対して等しくソートされる場合、行全体が現行ロケールの照合順序に基づいて比較されます。
フィールド内で桁を番号付けする場合、デフォルトのフィールド・セパレーターのブランク文字は、後に続くフィールドの一部として数えられます。 -t フラグで指定されたフィールド・セパレーター文字は、フィールドの一部として数えられません。 -b フラグを使用すると、先行ブランク文字は無視されます。
ソート・キーは、以下の 2 つのメソッドを使用して定義できます。
- -k KeyDefinition
- FSkip.CSkip (古いバージョン)
-k フラグを使用したソート・キー定義
-k KeyDefinition フラグは、以下の形式を使用します。
-k [FStart [.CStart ] ] [Modifier ] [, [FEnd [.CEnd ] ][Modifier ] ]
ソート・キーは、FStart 変数で指定されたフィールドと CStart 変数で指定された桁で始まり、FEnd 変数で指定されたフィールドと CEnd 変数で指定された桁で終わるすべての文字を含みます。 Fend を指定しないと、行の最後の文字が想定されます。 CEnd を指定しないと、FEnd フィールドの最後の文字が想定されます。 KeyDefinition 変数の任意のフィールド番号または桁番号は省略できます。 デフォルト値は以下のとおりです。
項目 | 説明 |
---|---|
FStart | 行の最初 |
CStart | フィールドの最初の桁 |
FEnd | 行の最後 |
CEnd | フィールドの最後の桁 |
フィールド間にスペースがあると、sort ではそれらを分離フィールドと見なします。
Modifier 変数の値は、文字 b、d、 f、i、n、 r のうちの 1 つ以上を指定できます。 修飾子は、それが付けられたフィールド定義に対してのみ適用され、同じ文字のフラグと同じ効果があります。 修飾子文字 b は、それが付けられているフィールド定義の最後にのみ適用されます。 次に例を示します。
-k 3.2b,3r
上記の例では、3 番目のフィールドの 2 番目の非ブランク桁から始まり、3 番目のフィールドの最後までのソート・キーを使用して、照合順序と逆の順序でソートするように指定されています。 FStart 変数および CStart 変数が、行の最後を超えたり FEnd 変数や CEnd 変数の後ろにある場合、ソート・キーは無視されます。
ソート・キーは同様に、以下の形式でも指定できます。
[+[FSkip1] [.CSkip1] [Modifier] ] [-[FSkip2] [.CSkip2] [Modifier]]
+FSkip1 変数は、ソート・キーの最初のフィールドに達するまでにスキップするフィールド数を指定し、+CSkip 変数は、そのフィールド内でソート・キーの最初の文字に達するまでにスキップする桁数を指定します。 -FSkip 変数は、ソート・キーの後 の最初の文字に達するまでにスキップするフィールド数を指定し、-CSkip 変数は、そのフィールド内でスキップする桁数を指定します。 フィールドおよび桁のスキップ数はすべて省略できます。 デフォルト値は以下のとおりです。
項目 | 説明 |
---|---|
FSkip1 | 行の最初 |
CSkip1 | ゼロ |
FSkip2 | 行の最後 |
CSkip2 | ゼロ |
Modifier 変数で指定された修飾子は、-k フラグのキー・ソート定義と同じです。
+FSkip1.CSkip1 変数によって指定されるフィールド数と桁数は、それらの変数がソート・キーに達するまでにスキップするフィールド数および桁数を指定しているため、一般的には、ソート・キー自身のフィールド数および桁数よりも 1 小さい数です。 例えば、次のようにします。
+2.1b -3r
上記の例では、3 番目のフィールドの 2 番目の非ブランク桁から始まり、3 番目のフィールドの最後までのソート・キーを使用して、照合順序と逆の順序でソートするように指定されています。 ステートメント +2.1b により、2 つのフィールドをスキップし、次に先行ブランクとさらに桁を 1 つスキップするように指定されています。 +FSkip1.CSkip1 変数が、行の最後を超えたり -FSkip2.CSkip2 変数の後ろにある場合、ソート・キーは無視されます。
注: 1 行の最大フィールド数は 32 です。
フラグ
項目 | 説明 |
---|---|
-A | 現行ロケール内の照合順序ではなく ASCII 照合順序を使って、バイト単位でソートします。 |
-b | 先行スペースおよびタブを無視して、フィールドの最初または最後の桁を探します。 |
-c | フラグ内で指定された順序規則に従って入力がソートされていることを検査します。 入力ファイルが正しくソートされていない場合は、ゼロ以外の値が戻されます。 |
-C | フラグ内で指定された順序規則に従って入力がソートされていることを検査します。ただし、障害がある場合、または -u オプションを使用して重複キーが検出された場合に警告メッセージが標準エラーに送信されないことを除きます。 |
-d | 辞書順でソートします。 文字、数字、スペースのみが比較の対象となります。 |
-f | 比較する前にすべての小文字を大文字に変更します。 |
-i | 比較するときに、非出力文字をすべて無視します。 |
-k KeyDefinition | ソート・キーを指定します。
KeyDefinition オプションのフォーマットは以下のとおりです。
[FStart [.CStart ] ] [Modifier ] [, [FEnd [.CEnd ] ][Modifier ] ] ソート・キーは、FStart 変数で指定されたフィールドと CStart 変数で指定された桁で始まり、FEnd 変数で指定されたフィールドと CEnd 変数で指定された桁で終わるすべての文字を含みます。 Modifier 変数の値は、b、d、f、i、n、r を指定できます。 修飾子は、同じ文字のフラグと同じです。 キー定義に修飾子が付加されている場合は、 フラグが適用されません。 |
-m | 複数の入力ファイルのマージのみを実行します。 入力はソート済みであると見なされます。 |
-n | 算術値を使って数値フィールドをソートします。 数値フィールドには、先行ブランク、オプションの負符号 (-)、10 進数、千の位取り記号、オプションの基数文字を含みます。 非数字を含むフィールドの数値ソートを実行すると、予想できない結果が起こる可能性があります。 |
-o OutFile | 標準出力の代わりに OutFile パラメーターで指定されたファイルへ出力を指示します。 OutFile パラメーターの値は、File パラメーターと同じです。 |
-r | 指定されたソートの順位を反転します。 |
-t Character | Character を 1 つのフィールド・セパレーター文字として指定します。 |
-u | ソート・キーとオプションに従って等価としてソートされる行の各セットの、最初の行以外をすべて抑制します。 |
-T Directory | 作成された一時ファイルのすべてを、Directory パラメーターで指定されたディレクトリーに入れます。 |
-y[Kilobytes] | Kilobytes パラメーターで指定されたキロバイト数の主記憶域を使って sort コマンドを始動し、必要に応じてストレージを追加します (Kilobytes パラメーターで指定された値が最小ストレージ・サイズより小さい場合、または最大ストレージ・サイズより大きい場合は、それぞれ最小値または最大値が使用されます)。-y フラグが省略されると、 sort コマンドはデフォルトのストレージ・サイズを使って始動されます。 -y0 フラグの場合は最小ストレージで始動され、-y フラグ (Kilobytes 値なし) の場合は最大ストレージで始動されます。 sort コマンドが使用するストレージの大きさは、パフォーマンスに大きく影響します。 大容量ストレージ内で小規模ファイルをソートすると、無駄が多くなります。 |
-z RecordSize | ソート中のいずれかの行がデフォルトのバッファー・サイズより長い場合に、異常終了するのを防ぎます。 デフォルトのバッファー・サイズは 20 KB です。 -c または -m フラグを指定すると、ソート・フェーズは省略され、システムのデフォルト・バッファー・サイズが使用されます。 ソートした行がデフォルトのサイズより長くなると、sort コマンドは異常終了します。 -z オプションは当該のソート・フェーズにおける最長行を記録するように指定するため、適当なバッファーをマージ・フェーズに割り当てることができます。 RecordSize 変数には、マージする最長行と同じかそれ以上のバイト値を指定しなければなりません。 C ロケールでサポートされる最長行サイズは約 2M 文字で、C 以外のロケールでサポートされる最長行サイズは 1M 文字です。 -z オプションは、C ロケールでは効果がありません。 |
終了状況
このコマンドは、以下の終了値を戻します。
項目 | 説明 |
---|---|
0 | すべての入力ファイルが正常に出力されたか、または -c が指定され、入力ファイルが正しくソートされました。 |
1 | -c オプションに基づいて、ファイルの順序が指定したとおりにならなかったか、または -c および -u オプションの両方を指定した場合に、2 つの入力行に同じキーが付いているのが見つかりました。 |
>1 | エラーが発生しました。 |
例
- LC_ALL、LC_COLLATE、LANG 環境変数を En_US に設定して fruits ファイルのソートを実行するには、以下のように入力します。
このコマンド・シーケンスによって、fruits ファイルの内容が辞書の昇順で表示されます。 スペース、数字、特殊文字を含めた各桁の文字が 1 つずつ比較されます。 例えば、fruits ファイルに以下のようなテキストが含まれている場合、LANG=En_US sort fruits
sort コマンドは以下のように表示します。banana orange Persimmon apple %%banana apple ORANGE
ASCII 照合順序では、英大文字は英小文字より先に、% (パーセント記号) は英大文字より先になります。 現行ロケールが ASCII 以外の文字セットを使用している場合は、結果が異なることもあります。%%banana ORANGE Persimmon apple apple banana orange
- 辞書順でソートするには、以下のように入力します。sort -d fruitsこのコマンド・シーケンスによって、文字、数字、スペースだけを比較して fruits ファイルの内容がソートされて表示されます。 fruits ファイルが例 1 と同じ場合は、sort コマンドは以下のように表示されます。
-d フラグは、% (パーセント記号) を文字、数字、スペースのいずれでもないので無視し、%%banana と banana を並べます。ORANGE Persimmon apple apple %%banana banana orange
- 英大文字および特殊文字を含む行を同様の英小文字と一緒にグループ化するには、以下のように入力します。
-d フラグは特殊文字を無視し、-f フラグは大文字と小文字の違いを無視します。
LC_ALL、LC_COLLATE、
LANG 環境変数を C に設定すると、
fruits ファイルの出力は以下のように表示されます。
apple apple %%banana banana ORANGE orange Persimmon
- 重複行を除去してソートするには、以下のように入力します。
-u フラグは sort コマンドに対して、
重複行を除去してファイルの各行を固有にするように指示します。
このコマンド・シーケンスにより、以下のように表示されます。
重複する apple だけでなく、 banana や ORANGE も除去されます。 これは -d フラグが %% 特殊文字を無視し、-f フラグが大文字と小文字の違いを無視するためです。apple %%banana ORANGE Persimmon
- 例 4 と同様にソートし、大文字化や句読点の位置の違いは別にして重複行を除去するには、以下のように入力します。
+0 -d -f と入力すると、
例 3 の -d -f で行われる場合と同じタイプのソートが行われます。
この場合、+0 では、同一でない行を区別するための別の比較が行われます。
これによって -u フラグがこれらの重複を除去しないようにします。
例 1 に示された fruits ファイルを使った場合、 付加された +0 によって %%banana と banana が区別され、 また ORANGE と orange が区別されます。 ただし、apple の 2 つのインスタンスはまったく同一なので、片方が削除されます。
apple %%banana banana ORANGE orange Persimmon
- フィールドを区切る文字を指定するには、以下のように入力します。sort -t: +1 vegetablesこのコマンド・シーケンスによって、vegetables ファイルがソートされ、各行の最初のコロンに続くテキストが比較されます。 +1 は sort コマンドに対して、 最初のフィールドを無視し、2 番目のフィールドの最初から行の終わりまでを比較することを指示します。 -t: フラグは sort コマンドに対して、フィールドがコロンで区切られることを指示します。 vegetables に以下の内容が含まれている場合は次のようになります。
LC_ALL、LC_COLLATE、LANG 環境変数を C に設定すると、sort コマンドは以下のように表示します。yams:104 turnips:8 potatoes:15 carrots:104 green beans:32 radishes:5 lettuce:15
数字は数値順になっていないことに注意してください。 これは辞書順によるソートが各文字を左から右へ比較するために起こります。 言いかえれば、3 は 5 の前に来るので、 32 が 5 の前に来ます。carrots:104 yams:104 lettuce:15 potatoes:15 green beans:32 radishes:5 turnips:8
- 数字をソートするには、以下のように入力します。
このコマンド・シーケンスによって、vegetables ファイルは 2 番目のフィールドの数値によってソートされます。
vegetables ファイルの内容が例 6 と同じ場合は、
sort コマンドは以下のように表示します。
radishes:5 turnips:8 lettuce:15 potatoes:15 green beans:32 carrots:104 yams:104
- 複数のフィールドについてソートを行うには、以下のように入力します。
または
このコマンド・シーケンスは、2 番目のフィールドで数値ソートを実行します (+1 -2 -n)。
同じ範囲で、最初のフィールドがアルファベットの逆順にソートされます (+0 -1 -r)。
LC_ALL、LC_COLLATE、
LANG 環境変数を C に設定すると、出力は以下のようになります。
このコマンドは行を数値順でソートします。 2 つの行に同じ数値が含まれている場合は、アルファベットの逆順に表示されます。radishes:5 turnips:8 potatoes:15 lettuce:15 green beans:32 yams:104 carrots:104
- 元のファイルをソートされたテキストと置き換えるには、以下のように入力します。sort -o vegetables vegetablesこのコマンド・シーケンスによって、 ソートされた出力が vegetables ファイル内に保管されます (-o vegetables)。
ファイル
項目 | 説明 |
---|---|
/usr/bin/sort | sort コマンドが入っています。 |
項目 | 説明 |
---|---|
/var/tmp | sort コマンドの処理中の一時スペースです。 |
/usr/tmp | ファイルを /var/tmp で作成できない場合の、sort コマンドの処理中の一時スペースになります。 |
/tmp | ファイルを /var/tmp または /usr/tmp で作成できない場合の、sort コマンドの処理中の一時スペースになります。 |