sort - ファイルをソートする

sortコマンドは、ファイルのソートを行うことができます。
sortコマンドは、基本的に文字コード順で文字を比較しますが、オプションを用いることで、数値の比較等をすることができます。
また、sortコマンドは、オプションを用いてキーを指定することで、より複雑なソートも行うことができます。

sortコマンドとは

sortコマンドは、ファイルをソートすることができます。
また、ファイルがソート済みかどうかのチェックやマージソート等も行うことができます。

いくつかのLinuxコマンドは、ソート済みファイルが条件となっている場合があります。
sortコマンドは、その前準備に用いることができます。

sortコマンドの構文

ファイルをソートする

sortコマンドの利用例

ファイルをソート
(オプションなし)

オプションなしのソートは、それぞれの行全体を見て、最初の文字から順に昇順にソートします。

コマンド例

randdata.txt

実行結果

大文字と小文字を同等として比較
(-fオプション)

-fオプションは、ソートをするときにアルファベットの大文字と小文字を同等として比較します。

大文字と小文字は同等として比較しますが、その順序は大文字が初めに来るようにソートされます。
また、-uオプションを用いると小文字のほうが削除されます。

コマンド例

randdata2.txt

実行結果

倍精度数値で比較
(-gオプション)

-gオプションは、数値を倍精度数値として扱い、ソートを行うことができます。

コマンド例

randdata3.txt

実行結果

eまたはEがつく数値は指数を用いた数値表現です。
1e+1は10を表し、1e+2は100を表します。
1e-1は0.1を表し、1e-2は0.01を表します。

SIの接頭辞で比較
(-hオプション)

-hオプションは、初めに数値でソートして、その後、SIの接頭辞(なし, Kかk, M, G, T, P, E, Z, Y)でソートを行います。
SIの接頭辞でソートを行うため、例えば、9999M等は1Gの手前になるようにソートされます。
コマンド例

randdata4.txt

実行結果

数値を比較
(-nオプション)

-nオプションを用いることで、数値を比較することができます。
環境によりますが、3桁ごとの桁区切りに,(カンマ)を用いることができます。
-nオプションでは、-gオプションのように指数表現を用いることはできません。

コマンド例

randdata5.txt

実行結果

キーを選択して比較
(-kオプション)

-kオプションは、始点のポジションと終端のポジションを指定して、その範囲の文字列に対してソートを行うことができます。

-kオプションは、-k2,2のように指定できます。
-kオプションの書式はf[.c][opts]になります。
fは列、cは文字の位置です。
cが省略される場合、始点の場合は1に、終端の場合は0になります。
optsはsortコマンドのソートオプションになり、そのキーに対してソートオプションを用いることができます。

-k2,2-k2.1,2.0の省略になります。
文字位置の1は、1文字目を表します。
ただし、終端ポジションの文字位置の0は、その列の終端を表します。

-k2のように、終端のポジションが省略された場合、始点から行末までの範囲の文字列で比較を行います。
ソートする範囲は、--debugオプションを用いて確認することもできます。

コマンド例は、2列目を降順でソートしています。

コマンド例

randdata6.txt

実行結果

区切り文字を変更
(-tオプション)

-tオプションを用いることで、区切り文字を変更することができます。
区切り文字は一つの文字を指定します。

コマンド例

randdata7.txt

実行結果

last-resort comparisonを無効
(-kオプションと-sオプション)

-kオプションを用いるときでも、sortコマンドは暗黙的に行全体のソートをしています。
sortコマンドのこの機能をlast-resort comparisonといいます。
この機能によって、ときどき意図しないソート結果になるかもしれません。
-sオプションを用いることでこの機能を無効にすることができます。

コマンド例

randdata8.txt

実行結果

-sオプションを用いない場合は以下のようになります。
コマンド例

実行結果