команда сортировки в unix с числовой сортировкой

10

У меня есть file1:

"$lvl=57"
"$lvl=20"
"$lvl=48"
"$lvl=17"
"$lvl=58"

File2 Я хочу:

"$lvl=17"
"$lvl=20"
"$lvl=48"
"$lvl=57"
"$lvl=58"

В основном числовой вид файла1.

Yisha
источник
Когда я запускаю простой Unix sortна вашем File1, без параметров, я получаю ваш File2. Что ты делаешь по-другому? Что ты оставляешь вне этого вопроса?
Скотт

Ответы:

17

Мне нравится -V --version-sort: он очень хорошо работает во многих ситуациях, смешивая строки и числа

sort -V

Я использую эту опцию очень часто ...

В каком-то направлении, ls -vдля версии-сортировки ls.

JJoao
источник
10

Вам необходимо указать sort -nсортировку по части после =:

sort -t = -k 2n
Стефан Шазелас
источник
Я недавно искал это ^^. Но еще один вопрос. Что делать -k2n? Это относится к числовой сортировке? благодарю вас.
αғsнιη
2
@KasiyA -kопределяет ключ сортировки. Смотрите man-страницу для подробностей. -k2nопределяет ключ сортировки, начинающийся во втором поле и заканчивающийся в конце строки, и делает его числовым ключом сортировки.
Стефан Шазелас
0

использовать сортировку:

sort -n file1 > file2

-n, --numeric-sort
сравнить по числовому значению строки

 sort -g file1 > file 2

-g, --general-numeric-sort

Hackaholic
источник
3
Нет, все эти строки имеют одинаковый рейтинг, sort -nпоскольку они не начинаются с цифры. Причина, по которой они сортируются, заключается в последней строке сортировки по полной строке (лексически, а не численно), выполняемой для строк с одинаковым ранжированием. Это было бы сортировать "$lvl=17"раньше "$lvl=2".
Стефан Шазелас
@ StéphaneChazelas спасибо за указание.
Hackaholic
Перефразируя, -nи -gздесь избыточны, так как ввод не числовой. Таким образом, этот ответ вводит в заблуждение, отсюда и отрицательный голос (также обратите внимание, что -gи длинные параметры специфичны для GNU).
Стефан Шазелас
но -g это хорошо, общий числовой сортировки
Hackaholic
Это все еще для сортировки числовых значений, разница в -nтом, что он не ограничен десятичными целыми числами. Это все еще сортировалось "$lvl=17"раньше "$lvl=2"как часть сортировки в крайнем случае.
Стефан Шазелас
0

Я обнаружил, что вы просто бежите sort -h, это будет работать. Они называют это --human-numberic-sort.

sort -h file1 > file2
Винсент Фам
источник
-1

sort -nэто то, что вы хотите использовать. Это сортирует, как мы сортируем числа.sort -k 2 -n file1

Cosmo
источник
2
Но ОП хочет отсортировать в порядке возрастания, что по умолчанию. Почему вы предлагаете обратный порядок?
G-Man говорит: «Восстановите Монику»
вышеупомянутое правильно, когда поля разделены табуляцией или пробелами и не будет работать в случае OP.
αғsнιη