Linux システムには、sort
テキスト ファイルを並べ替えるコマンドが用意されています。sort
コマンドは行、フィールド、または数値で並べ替えることができ、さまざまな並べ替えのニーズを満たすさまざまな並べ替えオプションをサポートしています。
基本的な構文とオプション
sort
コマンドの基本的な構文は次のとおりです。
sort [选项] [文件]
一般的なオプションは次のとおりです。
-r
:逆順(降順)に並べ替えます。-n
: 値で並べ替えます。-k 字段
: 指定したフィールドで並べ替えます。このパラメータには、カンマで区切って複数のフィールドを指定できます。デフォルトのフィールド区切り文字はタブまたはスペースです。-t 分隔符
: フィールドの区切り文字を指定します。-u
: 重複行を削除し、最初に出現した行のみを保持します。-f
: 大文字と小文字を区別せずに並べ替えます。-b
: ソートの際、行頭の空白文字を無視します。-c
: ファイルがソートされているかどうかを確認し、ソートされていない場合は、ソート順と一致しない最初の行を出力します。-f
: 大文字と小文字を区別せずに並べ替えます。たとえば、sort -f file.txt
並べ替えでは行の最初の文字の大文字と小文字は無視されます。-b
: ソートの際、行頭の空白文字を無視します。-c
: ファイルがソートされているかどうかを確認し、ソートされていない場合は、ソート順と一致しない最初の行を出力します。
行ごとに並べ替える
sort
このコマンドは、デフォルトで各行を辞書順に並べ替えます。たとえば、file.txt
次の内容の名前のテキスト ファイルがあるとします。
apple
banana
cherry
ファイルをアルファベット順に並べ替えるには、次のコマンドを実行できます。
sort file.txt
操作の結果は次のようになります。
apple
banana
cherry
フィールドごとに並べ替える
通常、テキスト ファイルの各行には、区切り文字 (タブやスペースなど) で区切られた複数のフィールドが含まれます。sort
コマンドは指定したフィールドで並べ替えることができます。
data.txt
次の内容の名前のテキスト ファイルがあるとします。
Tom 25 Male
Jerry 22 Female
Alice 27 Female
2 番目のフィールド (年齢) で並べ替えるには、並べ替えの基準となるフィールドとフィールドの区切り文字 (ここではスペース) を-k
指定するオプションを使用できます。-t
sort -k 2 -t ' ' data.txt
操作の結果は次のようになります。
Jerry 22 Female
Tom 25 Male
Alice 27 Female
番号順
デフォルトでは、sort
このコマンドは数値を辞書順に並べ替えます。数値で並べ替える必要がある場合は、-n
このオプションを使用できます。
numbers.txt
次の内容の名前のテキスト ファイルがあるとします。
10
2
100
50
数値的に並べ替えるには、次のコマンドを実行できます。
sort -n numbers.txt
操作の結果は次のようになります。
2
10
50
100
逆順
デフォルトでは、sort
コマンドは昇順 (最小値から最大値) で並べ替えられます。降順 (大きいものから小さいものへ) に並べ替える必要がある場合は、-r
このオプションを使用できます。
numbers.txt
例としてファイルを続けて逆順に並べ替えるには、次のコマンドを実行します。
sort -n -r numbers.txt
操作の結果は次のようになります。
100
50
10
2
重複した行を削除する
sort
このコマンドを使用して、テキスト ファイル内の重複行を削除し、最初に出現した行のみを保持することもできます。-u
これはオプションを使用して実現されます。
names.txt
次の内容の名前のテキスト ファイルがあるとします。
Tom
Jerry
Tom
Alice
Jerry
重複した行を削除するには、次のコマンドを実行します。
sort -u names.txt
操作の結果は次のようになります。
Alice
Jerry
Tom
複数のフィールドで並べ替える
sort
このコマンドは、複数のフィールドによる並べ替えをサポートしています。いくつかの-k
オプションを使用して、並べ替えるフィールドと並べ替え順序を指定できます。たとえば、data.txt
次の内容の名前のテキスト ファイルがあるとします。
Tom 25 Male
Jerry 22 Female
Alice 27 Female
性別 (3 番目のフィールド) で降順に並べ替え、次に年齢 (2 番目のフィールド) で昇順で並べ替えるには、次のコマンドを実行します。
sort -k 3r -k 2n data.txt
操作の結果は次のようになります。
Alice 27 Female
Jerry 22 Female
Tom 25 Male
ここでは、 を使用して-k 3r
3 番目のフィールドで降順でソートするように指定し (r
は逆順を示します)、次に を使用して-k 2n
2 番目のフィールドで昇順でソートするように指定します ( はn
値でソートすることを示します)。
先頭の文字を無視する
テキスト ファイルの各行には、スペースやタブなどの先頭文字が含まれる場合があります。ソート時にこれらの先頭文字を無視したい場合は、-b
このオプションを使用できます。たとえば、file.txt
次の内容の名前のテキスト ファイルがあるとします。
apple
banana
cherry
並べ替え時に先頭のスペースとタブを無視するには、次のコマンドを実行します。
sort -b file.txt
操作の結果は次のようになります。
apple
banana
cherry
ソートされた複数のファイルを結合する
sort
このコマンドでは、複数のファイルをマージしたり並べ替えたりすることもできます。並べ替えるファイル名を 1 つずつリストするだけです。たとえば、file1.txt
と の2 つのファイルがあるとしますfile2.txt
。内容は次のとおりです。
=== file1.txt ===
apple
cherry
=== file2.txt ===
banana
orange
2 つのファイルを結合して辞書順に並べ替えるには、次のコマンドを実行します。
sort file1.txt file2.txt
操作の結果は次のようになります。
apple
banana
cherry
orange
マージの結果、両方のファイルの内容が全体として並べ替えられます。
標準入力から読み込んだデータを並べ替える
コマンドは、ファイルからデータを読み取るだけでなく、sort
標準入力からデータを読み取り、並べ替えることもできます。これは他のコマンドと組み合わせると便利です。たとえば、一連の数値を並べ替えるには、それをsort
コマンドにパイプ処理します。例えば:
echo -e "3\n1\n2" | sort -n
操作の結果は次のようになります。
1
2
3
ここではecho
、コマンドを使用して一連の数値を生成し、並べ替えるためのコマンド|
にパイプ処理されています。sort