sort 行を並べ替える
sort [オプション] [ファイル...]試してみる
sort fruits.txt行を辞書順(文字の順)に並べ替えます。
sort nums.txt数字も文字として比べるので、10 が 9 より前に来ます。
sort -n nums.txt-n で数値として比べ、2、9、10、100 の順になります。
sort -nr nums.txt-r を加えると逆順になります。大きい順です。
sort -t, -k4 -n members.csv | tail -n 3カンマ区切りの4列目を数値として並べ替え、給与の高い3人を表示します。
sort -u fruits.txt並べ替えたうえで、重複した行を1つにします。
主なオプション
-n | 数値として比べる |
|---|---|
-r | 逆順にする |
-k 開始[,終了] | 比べる列(キー)を指定する。1始まり |
-t 文字 | 列の区切り文字を指定する(既定は空白の切れ目) |
-u | 重複した行を1行にする |
-f | 大文字と小文字を区別しない |
-h | 1K、2M のような単位付きの数を人が読む形式として比べる |
-o ファイル | 結果を指定したファイルに書く(元のファイルにも使える) |
解説
基本
sort は行を並べ替えて出力します。元のファイルは変わりません。並べ替えの順序は、環境のロケールに左右されることがあります。
数値の並べ替え
何も付けないと、文字として比べます。そのため 10 は 9 より前になります。数として比べるには -n が必要です。ファイルサイズの出力 du -h のような単位付きの数には -h を使います。
列を指定する
-k で、何列目で比べるかを指定します。-k2 は2列目から行末まで、-k2,2 は2列目だけで比べます。区切りは既定では空白の切れ目で、CSVなら -t, のように指定します。
uniq との関係
uniq は隣り合った同じ行しか1つにできないので、前処理に sort を使うのが定番です。sort -u は、その2つを1度でやります。
自分自身への出力
sort file > file は、リダイレクトでファイルが先に空になってしまい、内容が消えます。上書きしたいときは sort -o file file を使います。