ソート コマンドは、テキスト ファイル内の行をソート/順序付けするのに役立ちます。テキスト ファイル内のデータを並べ替えて、出力を画面に表示したり、ファイルにリダイレクトしたりできます。要件に基づいて、sort はテキスト ファイル内のデータを並べ替えるためのコマンド ライン オプションをいくつか提供します。
並べ替えコマンドの構文:
$ sort [-options]
たとえば、ここにテスト ファイルがあります:
$ cat test zzz sss qqq aaa BBB ddd AAA
そして、オプションなしでこのファイルに対して sort コマンドを実行すると、次のようになります。テスト ファイルの行を並べ替え、並べ替えられた出力を表示します。
$ sort test aaa AAA BBB ddd qqq sss zzz
1. -n オプションを使用して数値ソートを実行
数値でソートしたい場合は、 -n を使用できます または –numeric-sort オプション。
この例では、次のテスト ファイルを作成します。
$ cat test 22 zzz 33 sss 11 qqq 77 aaa 55 BBB
次の並べ替えコマンドは、行の最初の単語の数値でテスト ファイルの行を並べ替え、並べ替えられた出力を表示します。
$ sort -n test 11 qqq 22 zzz 33 sss 55 BBB 77 aaa
2. -h オプションを使用して人が読める数字を並べ替える
人間が読める数字 (例:2K 1M 1G) で並べ替えたい場合は、-h を使用できます。 または –human-numeric-sort オプション。
この例では、次のテスト ファイルを作成します。
$ cat test 2K 2G 1K 6T 1T 1G 2M
次の並べ替えコマンドは、テスト ファイル内の人間が読める数値 (つまり、1K =1000、1M =100 万、1G =1 ギガ、1T =1 テラ) を並べ替え、並べ替えられた出力を表示します。
$ sort -h test 1K 2K 2M 1G 2G 1T 6T
3. -M オプションを使用して月を並べ替える
月の順に並べ替えたい場合は、-M を使用できます。 または –月順 オプション。
この例では、次のテスト ファイルを作成します。
$ cat test sept aug jan oct apr feb mar11
次の並べ替えコマンドは、テスト ファイルの行を月順に並べ替えます。ファイル内の行には、行頭に少なくとも 3 文字の月名が含まれている必要があります (例:jan、feb、mar)。 1 月の場合は ja、8 月の場合は au を指定すると、sort コマンドはそれを月名と見なしません。
$ sort -M test jan feb mar11 apr aug sept oct
4. -c オプションを使用して、コンテンツが既にソートされているかどうかを確認します
テキストファイルのデータがソートされているかどうかを確認したい場合は、 -c を使用できます または –check, –check=diagnose-first オプション。
この例では、次のテスト ファイルを作成します。
$ cat test 2 5 1 6
次の sort コマンドは、テキスト ファイル データがソートされているかどうかをチェックします。そうでない場合は、最初の出現を行番号と無秩序な値で示します。
$ sort -c test sort: test:3: disorder: 1
5. -r および -u オプションを使用して、出力を反転し、一意性をチェックします
ソートされた出力を逆順に取得したい場合は、 -r を使用できます または –リバース オプション。ファイルに重複する行が含まれている場合、ソートされた出力で一意の行を取得するには、「-u」オプションを使用できます。
この例では、次のテスト ファイルを作成します。
$ cat test 5 2 2 1 4 4
次の並べ替えコマンドは、テスト ファイル内の行を逆順に並べ替え、並べ替えられた出力を表示します。
$ sort -r test 5 4 4 2 2 1
次の並べ替えコマンドは、テスト ファイル内の行を逆順に並べ替え、並べ替えられた出力から重複する行を削除します。
$ sort -r -u test 5 4 2 1
6. -k、-t、-o オプションを使用して、コンテンツを選択的に並べ替え、区切り文字をカスタマイズし、出力をファイルに書き込みます
テキストファイルの行の列または単語の位置でソートしたい場合は、「-k」オプションを使用できます。ファイルの各行の各単語が「スペース」以外の区切り文字で区切られている場合、「-t」オプションを使用して区切り文字を指定できます。出力を標準出力に表示する代わりに、(「-o」オプションを使用して) 指定した出力ファイルでソートされた出力を取得できます。
この例では、次のテスト ファイルを作成します。
$ cat test aa aa zz aa aa ff aa aa tt aa aa kk
次の並べ替えコマンドは、各行の 3 番目の単語でテスト ファイルの行を並べ替え、並べ替えられた出力を表示します。
$ sort -k3 test aa aa ff aa aa kk aa aa tt aa aa zz
$ cat test aa|5a|zz aa|2a|ff aa|1a|tt aa|3a|kk
ここでは、いくつかのオプションをまとめて使用します。テストファイルでは、各行の単語は区切り文字「|」で区切られています。数値に基づいて各行の 2 番目の単語でテスト ファイルの行を並べ替え、並べ替えられた出力を指定された出力ファイルに格納します。
$ sort -n -t'|' -k2 test -o outfile
出力ファイルの内容を以下に示します。
$ cat outfile aa|1a|tt aa|2a|ff aa|3a|kk aa|5a|zz