sort コマンド
目的
ファイルをソートしたり、既にソートされているファイルをマージしたり、ファイルを検査してソートされているかどうかを判別します。
構文
ソート [ -A ] [-B ] [「-c」 ] [ -d 年 ] [ 「-f」 ] [ I ] [ -m (M) ] [ N ] [ - ] [ -ウー ] [ - OutFile ] [ T キャラクター ] [ -T (T) ディレクトリー ] [ -y (Y) [ キロバイト数 ] ] [ -z RecordSize ] [ [ + [ スキップ ] [ .スキップ ] [ B ] [ D ] [ F ] [ I ] [ N ] [ R ] ] [ - [ スキップ ] [ .スキップ ] [ B ] [ D ] [ F ] [ I ] [ N ] [ R ] ] ] ... [ -k (K) KeyDefinition ] ... [ ファイル ... ]
説明
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 [ 開始[.C スタート]][ 修飾記号][ , [ FEnd (終わり)[ .「CEnd」]][ 修飾記号]]
ソート・キーは、FStart 変数で指定されたフィールドと CStart 変数で指定された桁で始まり、FEnd 変数で指定されたフィールドと CEnd 変数で指定された桁で終わるすべての文字を含みます。 Fend を指定しないと、行の最後の文字が想定されます。 CEnd を指定しないと、FEnd フィールドの最後の文字が想定されます。 KeyDefinition 変数の任意のフィールド番号または桁番号は省略できます。 デフォルト値は以下のとおりです。
| 項目 | 説明 |
|---|---|
| 開始 | 行の最初 |
| CStart (CStart) | フィールドの最初の桁 |
| FEnd (終わり) | 行の最後 |
| CEND | フィールドの最後の桁 |
フィールド間にスペースがあると、sort ではそれらを分離フィールドと見なします。
Modifier 変数の値は、1 つ以上の文字 ( b、 d、 f、 i) にすることができます。 n、または r。 修飾子は、それらが付加されているフィールド定義にのみ適用され、同じ文字のフラグと同じ効果があります。 修飾子文字 b は、それが付けられているフィールド定義の最後にのみ適用されます。 次に例を示します。
-k 3.2b,3r
上記の例では、3 番目のフィールドの 2 番目の非ブランク桁から始まり、3 番目のフィールドの最後までのソート・キーを使用して、照合順序と逆の順序でソートするように指定されています。 FStart 変数および CStart 変数が、行の最後を超えたり FEnd 変数や CEnd 変数の後ろにある場合、ソート・キーは無視されます。
ソート・キーは同様に、以下の形式でも指定できます。
[+[FSkip1] [.CSkip1] [Modifier]] [-[FSkip2] [.CSkip2] [修飾子]]
+FSkip1 変数は、ソート・キーの最初のフィールドに達するまでにスキップするフィールド数を指定し、+CSkip 変数は、そのフィールド内でソート・キーの最初の文字に達するまでにスキップする桁数を指定します。 -FSkip 変数は、ソート・キーの後 の最初の文字に達するまでにスキップするフィールド数を指定し、-CSkip 変数は、そのフィールド内でスキップする桁数を指定します。 フィールドおよび桁のスキップ数はすべて省略できます。 デフォルトは以下のとおりです。
| 項目 | 説明 |
|---|---|
| FSkip1 | 行の最初 |
| CSkip1 | ゼロ |
| FSkip2 | 行の最後 |
| CSkip2 | ゼロ |
Modifier 変数で指定された修飾子は、-k フラグのキー・ソート定義と同じです。
+FSkip1.CSkip1 変数によって指定されるフィールド数と桁数は、それらの変数がソート・キーに達するまでにスキップするフィールド数および桁数を指定しているため、一般的には、ソート・キー自身のフィールド数および桁数よりも 1 小さい数です。 次に例を示します。
+2.1b -3r
上記の例では、3 番目のフィールドの 2 番目の非ブランク桁から始まり、3 番目のフィールドの最後までのソート・キーを使用して、照合順序と逆の順序でソートするように指定されています。 以下のステートメントを+2.1b2 つのフィールドをスキップしてから、先行ブランクともう 1 つの列をスキップすることを指定します。 +FSkip1.CSkip1 変数が、行の最後を超えたり -FSkip2.CSkip2 変数の後ろにある場合、ソート・キーは無視されます。
注: 1 行の最大フィールド数は 32 です。
フラグ
| 項目 | 説明 |
|---|---|
| -A | 現行ロケール内の照合順序ではなく ASCII 照合順序を使って、バイト単位でソートします。 |
| -b | 先行スペースおよびタブを無視して、フィールドの最初または最後の桁を探します。 |
| -c | フラグ内で指定された順序規則に従って入力がソートされていることを検査します。 入力ファイルが正しくソートされていない場合は、ゼロ以外の値が戻されます。 |
| -C | フラグ内で指定された順序規則に従って入力がソートされていることを検査します。ただし、障害がある場合、または -u オプションを使用して重複キーが検出された場合に警告メッセージが標準エラーに送信されないことを除きます。 |
| -d | 辞書順でソートします。 文字、数字、スペースのみが比較の対象となります。 |
| -f | 比較する前にすべての小文字を大文字に変更します。 |
| -i | 比較するときに、非出力文字をすべて無視します。 |
| -k KeyDefinition | ソート・キーを指定します。 KeyDefinition オプションのフォーマットは以下のとおりです。 [ 開始[.C スタート]][ 修飾記号][ , [ FEnd (終わり)[ .「CEnd」]][ 修飾記号]] ソート・キーは、FStart 変数で指定されたフィールドと CStart 変数で指定された桁で始まり、FEnd 変数で指定されたフィールドと CEnd 変数で指定された桁で終わるすべての文字を含みます。 Modifier 変数の値は、 b、 d、 f、 i、 n、または r。 修飾子は、同じ文字のフラグに相当します。 キー定義に修飾子が付加されている場合は、 フラグが適用されません。 |
| -m | 複数の入力ファイルのマージのみを実行します。 入力はソート済みであると見なされます。 |
| -n | 算術値を使って数値フィールドをソートします。 数値フィールドには、先行ブランク、オプションの負符号 (-)、10 進数、千の位取り記号、オプションの基数文字を含みます。 非数字を含むフィールドの数値ソートを実行すると、予想できない結果が起こる可能性があります。 |
| -o OutFile | 標準出力の代わりに OutFile パラメーターで指定されたファイルへ出力を指示します。 OutFile パラメーターの値は、File パラメーターと同じです。 |
| -r | 指定されたソートの順位を反転します。 |
| -t 文字 | Character を 1 つのフィールド・セパレーター文字として指定します。 |
| -u | ソート・キーとオプションに従って等価としてソートされる行の各セットの、最初の行以外をすべて抑制します。 |
| -T ディレクトリー | 作成された一時ファイルのすべてを、Directory パラメーターで指定されたディレクトリーに入れます。 |
| -y[キロバイト] | KB パラメーターで指定された主ストレージのキロバイト数を使用して sort コマンドを開始し、必要に応じてストレージを追加します。 ( KB パラメーターに指定された値が最小ストレージ・サイトより小さいか、最大ストレージ・サイトより大きい場合は、代わりに最小値または最大値が使用されます。) -y フラグが省略されると、 sort コマンドはデフォルトのストレージ・サイズを使って始動されます。 -y0 フラグの場合は最小ストレージで始動され、-y フラグ (Kilobytes 値なし) の場合は最大ストレージで始動されます。 sort コマンドが使用するストレージの大きさは、パフォーマンスに大きく影響します。 大容量ストレージ内で小規模ファイルをソートすると、無駄が多くなります。 |
| -z RecordSize | ソート中のいずれかの行がデフォルトのバッファー・サイズより長い場合に、異常終了するのを防ぎます。 デフォルトのバッファー・サイズは 20 KB です。 -c または -m フラグを指定すると、ソート・フェーズは省略され、システムのデフォルト・バッファー・サイズが使用されます。 ソートした行がデフォルトのサイズより長くなると、sort コマンドは異常終了します。 -z オプションは当該のソート・フェーズにおける最長行を記録するように指定するため、適当なバッファーをマージ・フェーズに割り当てることができます。 RecordSize 変数には、マージする最長行と同じかそれ以上のバイト値を指定しなければなりません。 C ロケールにおいてサポートされる最大の行サイズは約 2M 文字で、C 以外のロケールでは 1M 文字です。 C ロケールでは、-z オプションは無効です。 |
終了状況
このコマンドは、以下の終了値を戻します。
| 項目 | 説明 |
|---|---|
| 0 | すべての入力ファイルが正常に出力されたか、または -c が指定され、入力ファイルが正しくソートされました。 |
| 1 | -c オプションに基づいて、ファイルの順序が指定したとおりにならなかったか、または -c および -u オプションの両方を指定した場合に、2 つの入力行に同じキーが付いているのが見つかりました。 |
| >1 | エラーが発生しました。 |
例
- ソートするには、fruitsLC_ALL、 LC_COLLATE、または LANG 環境変数が設定されたファイルEn_US次のように入力します。
このコマンド・シーケンスは、以下のものの内容を表示します。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実行されるのと同じタイプのソートを実行します-d -f例 3 にあります。 次に、+0は、同一でない行を区別するために別の比較を行います。 これによって -u フラグがこれらの重複を除去しないようにします。
指定されたfruits例 1 に示されているように, 追加されたファイルは,+0区別する%%bananaからbananaおよびORANGEからorangeただし、以下の 2 つのインスタンスは、apple同じものであるため、そのうちの 1 つが削除されます。
apple %%banana banana ORANGE orange Persimmon - フィールドを区切る文字を指定するには、次のように入力します。sort -t: +1 vegetablesこのコマンド・シーケンスは、vegetablesファイル。各行の最初のコロンに続くテキストを比較します。 この+1最初のフィールドを無視し、2 番目のフィールドの先頭から行の末尾までを比較するように sort コマンドに指示します。 この-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 - 数値をソートするには、次のように入力します。このコマンド・シーケンスは、vegetables2 番目のフィールドに数値で表示されます。 もしvegetablesfile が例 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 コマンド処理中の一時スペース。 |