Проблема в том, что вы видите, как работает sort -n
. Он смотрит только на начальное начальное числовое значение строки (или, в более общем случае, если вы используете -k
, поле )и сортирует по нему. Он вообще не понимает суффиксы KMG
, поэтому просто перестает искать числа, когда натыкается на них.
Проще всего сделать то, что вы сделали во втором примере :просто используйте du
без флага -h
и sort
работает совершенно естественно.
Если вы действительно хотите сохранить более удобочитаемый вывод du -h
, вам придется использовать еще один промежуточный этап конвейера, чтобы добавить декодированное число к выводу du
, затем отсортировать его, а затем, при необходимости, удалить выведите ключ сортировки, чтобы результат выглядел точно так же, как из du
.
Другим вариантом может быть использование простого du
, сортировка вывода, как вы делаете во втором примере, и передача этого вывода на другой этап для кодирования простых целых чисел, как это делает du -h
.
Традиционно вы использовали бы awk
для этих двух последних идей, но perl
или python
также будут работать.
Попробуйте sort -h
. Из руководства-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
Используйте sort --help
для лучшего ознакомления с параметрами команды.