Unix :: コマンド / sort

コマンド説明
sortテキストファイル中の行を文字や数値に基づいて昇順(または降順)に並べ替える
オプション説明
-M, --month-sort`JAN' < … < `DEC' のように比較します
-n, --numeric-sort数字列として比較します
-r, --reverse比較結果を逆順にします
-c, --check入力がソートされているかチェックします。ソートしません
-k, --key=POS1[,POS2]キーを POS1 から開始し、POS2 までとします
-t, --field-separator=SEPフィールドセパレータを非空白文字から空白文字への変わり目ではなく、SEP を使用します


以下のような「hoge.txt」があるとして、いろいろなソートを試してみます。

% less hoge.txt
1 789 fff 120000 1,6
2 789 ccc 16 2,5
3 456 ddd 1100000 3,4
4 456 aaa 1400 4,3
5 123 eee 13000 5,2
6 123 bbb 150 6,1
% sort -r < hoge.txt
6 123 bbb 150 6,1
5 123 eee 13000 5,2
4 456 aaa 1400 4,3
3 456 ddd 1100000 3,4
2 789 ccc 16 2,5
1 789 fff 120000 1,6
% sort -k3,3 < hoge.txt
4 456 aaa 1400 4,3
6 123 bbb 150 6,1
2 789 ccc 16 2,5
3 456 ddd 1100000 3,4
5 123 eee 13000 5,2
1 789 fff 120000 1,6
% sort -r -k4,4 < hoge.txt
2 789 ccc 16 2,5
6 123 bbb 150 6,1
4 456 aaa 1400 4,3
5 123 eee 13000 5,2
1 789 fff 120000 1,6
3 456 ddd 1100000 3,4 
% sort -r -n -k4,4 < hoge.txt
3 456 ddd 1100000 3,4
1 789 fff 120000 1,6
5 123 eee 13000 5,2
4 456 aaa 1400 4,3
6 123 bbb 150 6,1
2 789 ccc 16 2,5
% sort -k2,3 < hoge.txt
6 123 bbb 150 6,1
5 123 eee 13000 5,2
4 456 aaa 1400 4,3
3 456 ddd 1100000 3,4
2 789 ccc 16 2,5
1 789 fff 120000 1,6
% sort -r -n -k2,2 -k4,4 < hoge.txt
1 789 fff 120000 1,6
2 789 ccc 16 2,5
3 456 ddd 1100000 3,4
4 456 aaa 1400 4,3
5 123 eee 13000 5,2
6 123 bbb 150 6,1
% sort -r -k2,2 -k3,3b < hoge.txt
2 789 ccc 16 2,5
1 789 fff 120000 1,6
4 456 aaa 1400 4,3
3 456 ddd 1100000 3,4
6 123 bbb 150 6,1
5 123 eee 13000 5,2
% sort -t ',' -r -k2,2 < hoge.txt
1 789 fff 120000 1,6
2 789 ccc 16 2,5
3 456 ddd 1100000 3,4
4 456 aaa 1400 4,3
5 123 eee 13000 5,2
6 123 bbb 150 6,1



ファイルがソートされているかチェックする、-c, --check オプション

以下のようなソートされてない「hoge.txt」があるとして、-c オプションを試してみます

% less hoge.txt
1 789 fff 120000 1,6
2 789 ccc 16 2,5
3 456 ddd 1100000 3,4
9 456 aaa 1400 4,3
5 123 eee 13000 5,2
6 123 bbb 150 6,1
% sort -c < hoge.txt
sort: -:5: disorder: 5 123 eee 13000 5,2

ソートされていない行を「5行目」で発見したという意味