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
  • FSkipCSkip (廃止版)。

-k フラグを使用したソート・キー定義

-k KeyDefinition フラグは、以下の形式を使用します。

- k [ 開始[.C スタート]][ 修飾記号][ , [ FEnd (終わり)[ .「CEnd」]][ 修飾記号]]

ソート・キーは、FStart 変数で指定されたフィールドと CStart 変数で指定された桁で始まり、FEnd 変数で指定されたフィールドと CEnd 変数で指定された桁で終わるすべての文字を含みます。 Fend を指定しないと、行の最後の文字が想定されます。 CEnd を指定しないと、FEnd フィールドの最後の文字が想定されます。 KeyDefinition 変数の任意のフィールド番号または桁番号は省略できます。 デフォルト値は以下のとおりです。

項目 説明
開始 行の最初
CStart (CStart) フィールドの最初の桁
FEnd (終わり) 行の最後
CEND フィールドの最後の桁

フィールド間にスペースがあると、sort ではそれらを分離フィールドと見なします。

Modifier 変数の値は、1 つ以上の文字 ( bdfi) にすることができます。 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 -b, -d, -f, -i, -n, または、ソート・キー定義がすべてのソート・キーに適用される前に表示される -r フラグ。 b-d-f-i-n-rフラグのいずれも、-k KeyDefinitionの後に単独で現れることはできない。もし、それらが修飾子としてKeyDefinition変数に付加されている場合、付加されているソートキーにのみ適用される。 これらのフラグのうちの 1 つが +Fskip.Cskip または -Fskip.Cskip ソート・キー定義の後ろに続く場合は、フラグはそのソート・キーにのみ適用されます。
項目 説明
-A 現行ロケール内の照合順序ではなく ASCII 照合順序を使って、バイト単位でソートします。
-b 先行スペースおよびタブを無視して、フィールドの最初または最後の桁を探します。
-c フラグ内で指定された順序規則に従って入力がソートされていることを検査します。 入力ファイルが正しくソートされていない場合は、ゼロ以外の値が戻されます。
-C フラグ内で指定された順序規則に従って入力がソートされていることを検査します。ただし、障害がある場合、または -u オプションを使用して重複キーが検出された場合に警告メッセージが標準エラーに送信されないことを除きます。
-d 辞書順でソートします。 文字、数字、スペースのみが比較の対象となります。
-f 比較する前にすべての小文字を大文字に変更します。
-i 比較するときに、非出力文字をすべて無視します。
-k KeyDefinition ソート・キーを指定します。 KeyDefinition オプションのフォーマットは以下のとおりです。

[ 開始[.C スタート]][ 修飾記号][ , [ FEnd (終わり)[ .「CEnd」]][ 修飾記号]]

ソート・キーは、FStart 変数で指定されたフィールドと CStart 変数で指定された桁で始まり、FEnd 変数で指定されたフィールドと CEnd 変数で指定された桁で終わるすべての文字を含みます。 Modifier 変数の値は、 bdfin、または 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 エラーが発生しました。

  1. ソートするには、fruitsLC_ALLLC_COLLATE、または LANG 環境変数が設定されたファイルEn_US次のように入力します。
    LANG=En_US sort fruits
    このコマンド・シーケンスは、以下のものの内容を表示します。fruits昇順の辞書式順序でソートされたファイル。 スペース、数字、特殊文字を含めた各桁の文字が 1 つずつ比較されます。 例えば、次のようになります。fruitsファイルには次のテキストが含まれます
    banana
    orange
    Persimmon
    apple
    %%banana
    apple
    ORANGE
    sort コマンドは、次のように表示します。
    %%banana
    ORANGE
    Persimmon
    apple
    apple
    banana
    orange
    ASCII 照合シーケンスでは、以下のようになります。%(パーセント記号) は大文字の前に付き、小文字の前に付きます。 現行ロケールが ASCII 以外の文字セットを使用している場合は、結果が異なることもあります。
  2. 辞書順にソートするには、次のように入力します。
    sort  -d fruits
    このコマンド・シーケンスは、以下のものの内容をソートして表示します。fruits文字、数字、およびスペースのみを比較します。 もしfruitsファイルが例 1 と同じである場合、 sort コマンドは次のように表示します。
    ORANGE
    Persimmon
    apple
    apple
    %%banana
    banana
    orange
    -d フラグは、%(パーセント記号) 文字 (文字、数字、またはスペースではないため)%%banana使用:banana.
  3. 大文字および特殊文字を含む行を類似した小文字でグループ化するには、次のように入力します。
    sort  -d -f fruits
    -d フラグは特殊文字を無視し、-f フラグは大文字と小文字の違いを無視します。 LC_ALLLC_COLLATE、または LANG 環境変数が次のように設定されているとします。C、以下の出力fruitsファイルの内容:
    apple
    apple
    %%banana
    banana
    ORANGE
    orange
    Persimmon
  4. 重複行を除去してソートするには、次のように入力します。
    sort  -d  -f  -u fruits
    -u フラグは sort コマンドに対して、 重複行を除去してファイルの各行を固有にするように指示します。 このコマンド・シーケンスにより、以下のように表示されます。
    apple
    %%banana
    ORANGE
    Persimmon
    重複しているだけではありませんapple削除されたが、bananaおよびORANGE同様に これらは削除されます。 -d フラグは、%%特殊文字と -f フラグは大/小文字の違いを無視します。
  5. 例 4 のようにソートして、大文字または句読点が異なる場合を除き、重複するインスタンスを削除するには、次のように入力します。
    sort  -u +0  -d -f +0 fruits
    入力+0 -d -f実行されるのと同じタイプのソートを実行します-d -f例 3 にあります。 次に、+0は、同一でない行を区別するために別の比較を行います。 これによって -u フラグがこれらの重複を除去しないようにします。

    指定されたfruits例 1 に示されているように, 追加されたファイルは,+0区別する%%bananaからbananaおよびORANGEからorangeただし、以下の 2 つのインスタンスは、apple同じものであるため、そのうちの 1 つが削除されます。

    apple
    %%banana
    banana
    ORANGE
    orange
    Persimmon
  6. フィールドを区切る文字を指定するには、次のように入力します。
    sort  -t: +1 vegetables
    このコマンド・シーケンスは、vegetablesファイル。各行の最初のコロンに続くテキストを比較します。 この+1最初のフィールドを無視し、2 番目のフィールドの先頭から行の末尾までを比較するように sort コマンドに指示します。 この-t:フラグは、フィールドをコロンで区切るように sort コマンドに指示します。 指定する場合は、vegetablesの内容:
    yams:104
    turnips:8
    potatoes:15
    carrots:104
    green beans:32
    radishes:5
    lettuce:15
    LC_ALLLC_COLLATELANG 環境変数を C に設定すると、sort コマンドは以下のように表示します。
    carrots:104
    yams:104
    lettuce:15
    potatoes:15
    green beans:32
    radishes:5
    turnips:8
    数字は数値順になっていないことに注意してください。 これは辞書順によるソートが各文字を左から右へ比較するために起こります。 言い換えれば3前に来る5、そのため32前に来る5.
  7. 数値をソートするには、次のように入力します。
    sort  -t: +1  -n vegetables
    このコマンド・シーケンスは、vegetables2 番目のフィールドに数値で表示されます。 もしvegetablesfile が例 6 と同じであれば、 sort コマンドは次のように表示します。
    radishes:5
    turnips:8
    lettuce:15
    potatoes:15
    green beans:32
    carrots:104
    yams:104
  8. 複数のフィールドをソートするには、次のように入力します。
    sort  -t: +1 -2  -n +0 -1  -r vegetables
    または
    sort  -t:  -k2,2 n -k1,1 r vegetables
    このコマンド・シーケンスは、2 番目のフィールド (+1 -2 -n)。 その順序の中で、最初のフィールドをアルファベットの逆順にソートします (+0 -1 -r)。 LC_ALLLC_COLLATE、または LANG 環境変数が C に設定されている場合、出力は以下のようになります。
    radishes:5
    turnips:8
    potatoes:15
    lettuce:15
    green beans:32
    yams:104
    carrots:104
    このコマンドは行を数値順でソートします。 2 つの行に同じ数値が含まれている場合は、アルファベットの逆順に表示されます。
  9. 元のファイルをソート済みテキストで置き換えるには、次のように入力します。
    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 コマンド処理中の一時スペース。