sort コマンド

テキストファイルの行を並べ替えます。

概要

sort コマンドは、テキストファイルや標準入力の行をアルファベット順、数値順、または逆順に並べ替えます。複数のソート済みファイルを結合したり、重複行を削除したり、各行内の特定のフィールドや文字に基づいてさまざまな並べ替え操作を実行したりすることができます。

オプション

-n, --numeric-sort

アルファベット順ではなく数値順(数値の大きさ)で並べ替えます

$ sort -n numbers.txt
1
2
10
20
100

-r, --reverse

比較結果を逆順にします

$ sort -r names.txt
Zack
Victor
Susan
Alice

-f, --ignore-case

並べ替え時に大文字と小文字を区別しません

$ sort -f mixed_case.txt
Alice
apple
Banana
cat
Dog

-k, --key=POS1[,POS2]

POS1から始まりPOS2で終わるキーで並べ替えます

$ sort -k 2 employees.txt
101 Adams 5000
103 Brown 4500
102 Clark 5500

-t, --field-separator=SEP

非空白から空白への遷移の代わりに、SEPをフィールド区切り文字として使用します

$ sort -t: -k3,3n /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

-u, --unique

等しい行の最初のもののみを出力します(重複を削除)

$ sort -u duplicates.txt
apple
banana
orange

-M, --month-sort

月として比較します(JAN < FEB < ... < DEC)

$ sort -M months.txt
Jan
Feb
Mar
Apr
Dec

-h, --human-numeric-sort

人間が読みやすい数値(例:2K、1G)を比較します

$ sort -h sizes.txt
10K
1M
2M
1G

-R, --random-sort

キーのランダムハッシュで並べ替えます

$ sort -R names.txt
Victor
Alice
Susan
Zack

使用例

ファイルを数値順に並べ替える

$ cat numbers.txt
10
2
100
1
20
$ sort -n numbers.txt
1
2
10
20
100

カスタム区切り文字を使用して特定の列で並べ替える

$ cat data.csv
John,25,Engineer
Alice,30,Doctor
Bob,22,Student
$ sort -t, -k2,2n data.csv
Bob,22,Student
John,25,Engineer
Alice,30,Doctor

複数のソート済みファイルを結合する

$ sort -m file1.txt file2.txt > merged.txt

重複を削除して新しいファイルに保存する

$ sort -u input.txt > output.txt

ヒント

一度に並べ替えと重複削除を行う

sort -u を使用すると、ファイルの並べ替えと重複行の削除を一度の操作で行うことができます。これは sort | uniq を使用するよりも効率的です。

ファイルが既に並べ替えられているかを確認する

sort -c filename を使用すると、実際に何も出力せずにファイルが既に並べ替えられているかを確認できます。ファイルが並べ替えられていない場合はエラーメッセージが返されます。

大きなファイルのメモリ考慮事項

非常に大きなファイルの場合、sort -T /tmp を使用して十分な容量のある一時ディレクトリを指定するか、sort -S 1G を使用して並べ替えにより多くのメモリを割り当てます。

安定ソート

sort -s を使用すると安定ソートが行われ、等しいキーを持つ行の元の順序が保持されます。これは、同等のアイテムの元の順序を維持したい場合に便利です。

よくある質問

Q1. ファイルを逆順に並べ替えるにはどうすればよいですか?

A. sort -r filename を使用して、逆順(降順)で並べ替えます。

Q2. CSVファイルを特定の列で並べ替えるにはどうすればよいですか?

A. sort -t, -k2,2 filename.csv を使用して2列目で並べ替えます。ここで -t, はカンマをフィールド区切り文字として指定します。

Q3. IPアドレスを正しく並べ替えるにはどうすればよいですか?

A. バージョン並べ替えには sort -V を使用します。これはIPアドレスに適しています:sort -V ip_addresses.txt

Q4. 複数のフィールドで並べ替えるにはどうすればよいですか?

A. 複数のキーを指定します:sort -k1,1 -k2,2n filename は最初にフィールド1をアルファベット順に、次にフィールド2を数値順に並べ替えます。

Q5. ヘッダーのあるファイルを並べ替え、ヘッダーを先頭に保持するにはどうすればよいですか?

A. 次のように使用します:(head -1 file.txt; tail -n +2 file.txt | sort) > sorted_file.txt

参考文献

https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

改訂履歴