На этот вопрос теперь дан ответ - прокрутите до конца этого поста для решения.
Извиняюсь, если ответ уже здесь, но все ответы, которые я нашел до сих пор, предполагают либо флаг -h, либо-n флаг, и ни один из них не работает для меня ...
У меня есть некоторые выходные данные команды curl, которая дает мне несколько столбцов данных.Один из этих столбцов - это читаемый человеком размер файла («1,6 МБ», «4,3 ГБ» и т. Д.).
Я использую команду unix sort для сортировки по соответствующему столбцу,но, похоже, он пытается отсортировать по алфавиту, а не по количеству.Я пытался использовать флаги -n и -h, но, хотя они и меняют порядок, ни в одном из них порядок численно не верен.
Я на CentOS Linux box версии 7.2.1511.У меня установлена версия sort"sort (GNU coreutils) 8.22".
Я пытался использовать флаг -h в следующих форматах:
curl localhost:9200/_cat/indices | sort -k9,9h | head -n5
curl localhost:9200/_cat/indices | sort -k9 -h | head -n5
curl localhost:9200/_cat/indices | sort -k 9 -h | head -n5
curl localhost:9200/_cat/indices | sort -k9h | head -n5
Я всегда получаю такие результаты:
green open indexA 5 1 0 0 1.5kb 800b
green open indexB 5 1 9823178 2268791 152.9gb 76.4gb
green open indexC 5 1 35998 7106 364.9mb 182.4mb
green open indexD 5 1 108 11 387.1kb 193.5kb
green open indexE 5 1 0 0 1.5kb 800b
Я пытался использовать флаг -n в тех же форматах, что и выше:
curl localhost:9200/_cat/indices | sort -k9,9n | head -n5
curl localhost:9200/_cat/indices | sort -k9 -n | head -n5
curl localhost:9200/_cat/indices | sort -k 9 -n | head -n5
curl localhost:9200/_cat/indices | sort -k9n | head -n5
Я всегда получаю эти результаты:
green open index1 5 1 1021 0 3.2mb 1.6mb
green open index2 5 1 8833 0 4.1mb 2mb
green open index3 5 1 4500 0 5mb 2.5mb
green open index4 1 0 3 0 3.9kb 3.9kb
green open index5 3 1 2516794 0 8.6gb 4.3gb
Редактировать: Оказалось, что есть две проблемы:
1) сортировка ожидает увидеть заглавные буквы - M, K и G вместо mb, kb и gb (для байтов вы можете просто оставить пустым).
2) сортировка будет включать начальные пробелы, если вы явно не исключите их, что портит порядок.
Решение состоит в том, чтобы заменить строчные буквы заглавными и использовать флаг -b дляmake sort игнорирует начальные пробелы (я основал этот ответ на решении @Vinicius ниже, потому что его легче читать, если вы не знаете регулярное выражение):
curl localhost:9200/_cat/indices | tr '[kmg]b' '[KMG] ' | sort -k9hb