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の倍数、キビバイト)
は異なる単位として扱われる。
\第一線のプログラマーの行動原理を学べる!/
