ソートコマンド(sort)
“sort” コマンドは、ファイルの各行を単位として扱い、相互に比較し、比較の原則は先頭の文字から順にASCIIコード値で比較し、最終的に昇順で出力するものです。
常用オプション
①sort
デフォルト昇順
[root@localhost demo]# cat input.txt
apple
orange
mango
[root@localhost demo]# sort input.txt
apple
mango
orange
[root@localhost demo]#
②sort -r
降順
[root@localhost demo]# sort -r input.txt
orange
mango
apple
③sort -u
ソートと重複削除を同時に行う
👇重複データを削除します。
[root@localhost demo]# cat input.txt
apple
orange
orange
mango
[root@localhost demo]# sort -u input.txt
apple
mango
orange
[root@localhost demo]#
④sort -n
数値順でソート
👇数値をソートする際、-nを指定する。
[root@localhost demo]# cat input.txt
10apple
2orange
3mango
[root@localhost demo]# sort input.txt
10apple
2orange
3mango
[root@localhost demo]# sort -n input.txt
2orange
3mango
10apple
[root@localhost demo]#
⑤sort -k
何列目をキーとしてソート
-t
で区切り文字指定しない場合、スペースやタブを区切り文字として認識
また、フィールドの間に複数のスペースがある場合、その数は全ての行は一致する必要あります。
”20”と" 50"をソートする場合、" 50"が先頭に行きます。” ”が優先ですから。
👇2列目をキーとしてソート(-k 2
と-k2
は同じ)
[root@localhost demo]# cat fruit.txt
apple 100
orange 75
banana 50
[root@localhost demo]#
[root@localhost demo]# sort -n -k 2 fruit.txt
banana 50
orange 75
apple 100
[root@localhost demo]#
⑥sort -k 1.3
指定列目の何文字目からキーとしてソート
👇3,apple
は一つのフィールドとして認識。3桁目からキーとしてソート
[root@localhost demo]# cat input.txt
3,apple
2,orange
1,mango
[root@localhost demo]# sort input.txt
1,mango
2,orange
3,apple
[root@localhost demo]# sort -k 1.3 input.txt
3,apple
1,mango
2,orange
[root@localhost demo]#
⑦sort -k -t
区切り文字を指定して何列目をキーとしてソート
👇区切り文字’,'が指定されるから、”3,apple”は2列となります。
[root@localhost demo]# sort -k 2 -t ',' input.txt
3,apple
1,mango
2,orange
[root@localhost demo]#
⑧sort -k -k
複数の列をキーとしてソート
👇3列目を第1ソートキー、2列目を第2ソートキー
[root@localhost demo]# cat list.txt
3,apple,75
2,orange,95
4,banana,95
1,mango,50
[root@localhost demo]# sort -t ',' -k3 -k2 list.txt
1,mango,50
3,apple,75
4,banana,95
2,orange,95
[root@localhost demo]#
⑨sort -o
ソート結果で元ファイルを上書き
※-o
を使わないと、標準出力とか指定のファイルに出力します(例:sort file1 > file2)。
👇処理結果を直接元ファイルに反映したい場合、-oを使う。
[root@localhost demo]# cat list.txt
3,apple,75
2,orange,95
4,banana,95
1,mango,50
[root@localhost demo]# sort -t ',' -k3 -k2 list.txt -o list.txt
[root@localhost demo]# cat list.txt
1,mango,50
3,apple,75
4,banana,95
2,orange,95
[root@localhost demo]#
その他のオプション
①-f
このオプションを使用すると、小文字を大文字に変換して比較するため、大文字と小文字を区別せずにソートします。
②-c
このオプションを使用すると、ファイルがすでにソートされているかどうかをチェックし、ソートされていない場合は最初に見つかった不整合のある行の情報を出力し、終了コード 1 を返します。
③-C
このオプションを使用すると、ファイルがすでにソートされているかどうかをチェックし、ソートされていない場合は何も出力せずに終了コード 1 を返します。
④-M
このオプションを使用すると、月を表す英語の略語を使用して、月の名前をソートします。例えば、JANはFEBよりも小さくなります。
⑤-b
このオプションを使用すると、各行の先頭にあるすべての空白文字を無視して、最初の可視文字から比較を始めます。
コメント欄