human readableな数値のソート

K, M, Gなどのsuffixを考慮してhuman readableな数値をソートするには、-h(--human-numeric-sort--sort=human-numeric)オプションを使用する。

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

単なる数値には-nオプションを使用する。

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

-nオプションをつけない場合は辞書順でソートされる。

$ sort numbers.txt
1
10
2

しかし10Kや2Mのようなhuman readableな数値には、-nオプションでは正しくソートできない。

$ cat numbers.txt
10K
2M
1G
$ sort -n numbers.txt
1G
2M
10K

応用

duコマンドは-hオプションを指定するとhuman readableな形式でディスク使用量を表示できる。
例えば現在のディレクトリ直下の各フォルダ以下の合計サイズは以下のように確認できる。

$ du -d 1 -h
4.0G	./folder1
1.2M	./folder2
512K	./folder3

この出力をhuman readableな数値でソートするには、パイプでsort -hに渡す。

$ du -d 1 -h | sort -h
512K	./folder3
1.2M	./folder2
4.0G	./folder1

sort -nでソートするにはduコマンドの-hオプションを外す必要があるが、 数百MBなのか数GBなのかを一目で確認したい場合に不便。

$ du -d 1 | sort -n
524288	./folder3
1258291	./folder2
4294967296	./folder1

sortコマンドはデフォルトでは昇順となるが、降順としたい場合は-rオプションを追加する。

$ du -d 1 -h | sort -hr
4.0G	./folder1
1.2M	./folder2
512K	./folder3

補足

-hオプションはGNU Coreutils 7.5 (2009年リリース) 以降で利用可能である。ほとんどの現代的なLinuxシステムでは標準で使用できる。

K (キロバイト)、M (メガバイト)、G (ギガバイト) 以外にも、T (テラバイト) やP(ペタバイト)などのより大きな単位にも対応している。詳細はsort(1) - Linux manual page を参照。

sort -hは大文字と小文字を区別する。K (1000の倍数)とk (1024の倍数、キビバイト) は異なる単位として扱われる。