テキストファイルのソート( sort )
テキストファイルの中身をソートするには sort コマンドが使える。オプションでどのような順序でソートするのか指定することができる
※ソート:特定の規則に従ってデータを並びかえること
$ sor [ オプション ] [ ファイル名 ]
オプション
-r 逆順でソートする -k n n列目のデータをソートする -n 数値としてソートする
ファイルの準備
サンプルとなるファイルを作成する。三人の名前と数値を用いて sort コマンドとオプションの機能を確認する。
$ cat > score yoshinori kawazu 85 keiichi oka 70 toru minemura 100 ( Ctrl + c で終了する )
ファイルを作成したので、内容を確認する
$ cat score yoshinori kawazu 85 keiichi oka 70 toru minemura 100
入力した内容がそのままファイルに書き込まれている。sortコマンドの機能を確認するために、このファイルをソートする。
$ sort score keiichi oka 70 toru minemura 100 yoshinori kawazu 85
オプションを付けない場合は各行の1文字目のアルファベット順にソートされる( K → T → Y )。
-r オプション
$ sort -r score yoshinori kawazu 85 toru minemura 100 keiichi oka 70
アルファベットの逆順でソートされている( Y → T → K )。
n列目のデータソート ( -k )
例では、1文字目を鍵としてソートを行った。これは「名前でソートしている」のと同義である。
名前ではなく、名字でソートをしたい場合は -k オプションを利用する。 -k オプションをつけることでソートの鍵として利用する列の番号を指定することができる。
$sort -k 2 score yoshinori kawazu 85 toru minemura 100 keiichi oka 70
2列目のデータ(名字)を基準にソートされている( K → M → O )。
数値式でのソート
今度は三列目の得点でソートしてみる。
$ sort -k 3 score toru minemura 100 keiichi oka 70 yoshinori kawazu 85
並び順がおかしくなっている。大きい順に並ぶなら 100→85→70 になるはずで、小さい順になるなら 70→85→100 になる。しかし、今回はそのどちらでもない。
これは、3つの数値が「文字」として認識されてしまっているのが原因である。sort は1文字目しか見ないため、今回のコマンドだと3列目のデータの1文字目を基準してソートする( 1→7→8 )。
これを辞書式ソートといい、文字を辞書に出てくる順にソートする。基準にするデータがアルファベットであれば問題ないが、得点などの数値をソートした場合には不適切である。
これに対して数値でソートすることを数値式ソートといい、 sort に-n オプションをつけることで実行できる。
$ sort -n -k 3 score keiichi oka 70 yoshinori kawazu 85 toru minemura 100
特典が低い順でソートされた。
オプションに -r を加える。
$ sort -n -r -k 3 score toru minemura 100 yoshinori kawazu 85 keiichi oka 70
-r を付与することで、得点の高い順でソートされた。(逆順でソートされた)