Пример file.txt
:
100 foo
2 bar
300 tuu
При использовании sort -k 1,1 file.txt
порядок строк не изменится, хотя мы ожидаем:
2 bar
100 foo
300 tuu
Как отсортировать поле, состоящее из чисел, по абсолютному числовому значению?
Пример file.txt
:
100 foo
2 bar
300 tuu
При использовании sort -k 1,1 file.txt
порядок строк не изменится, хотя мы ожидаем:
2 bar
100 foo
300 tuu
Как отсортировать поле, состоящее из чисел, по абсолютному числовому значению?
Взгляните на справочную страницу для сортировки...
-n, --numeric-sort compare according to string numerical value
Так вот пример...
sort -n filename
-g, --general-numeric-sort
может быть более целесообразным. Это также позволяет использовать научную нотацию, например. 1.234E10 и т. д.
- person Herpes Free Engineer; 04.04.2018
Если вы сортируете строки, которые содержат смешанный текст и числа, например, имена файлов скользящих журналов, то сортировка с помощью sort -n
не работает должным образом:
$ ls |sort -n
output.log.1
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.2
output.log.20
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
В этом случае вариант -V
делает свое дело:
$ ls |sort -V
output.log.1
output.log.2
output.log.3
output.log.4
output.log.5
output.log.6
output.log.7
output.log.8
output.log.9
output.log.10
output.log.11
output.log.12
output.log.13
output.log.14
output.log.15
output.log.16
output.log.17
output.log.18
output.log.19
output.log.20
со страницы руководства:
-V, --version-sort natural sort of (version) numbers within text
ls
через sed
для удаления букв и оставления только цифр, по-видимому, цветной вывод также влиял на вещи. Так что запуск ls --color=never
тоже имел значение.
- person Max Starkenburg; 12.02.2016
-V
это именно то, что я искал. Я должен взять за привычку сначала просматривать справочные страницы.
- person srowley; 06.12.2019
-V
была той версией, которая мне была нужна!
- person 9-Pin; 25.02.2021
Ну, большинство других ответов здесь относятся к
sort -n
Однако я не уверен, что это работает для отрицательных чисел. Вот результаты, которые я получаю с sort версии 6.10 в Fedora 9.
Входной файл:
-0.907928466796875
-0.61614990234375
1.135406494140625
0.48614501953125
-0.4140167236328125
Выход:
-0.4140167236328125
0.48614501953125
-0.61614990234375
-0.907928466796875
1.135406494140625
Который явно не упорядочен по числовому значению.
Тогда я предполагаю, что более точным ответом будет использование sort -n
, но только если все значения положительны.
P.S.: Использование sort -g
возвращает те же результаты для этого примера
Редактировать:
Похоже, что настройки локали влияют на то, как знак минус влияет на порядок (см. здесь). Чтобы получить правильные результаты, я просто сделал:
LC_ALL=C sort -n filename.txt
Вы должны использовать опцию числовой сортировки:
sort -n -k 1,1 File.txt
Используйте sort -n
или sort --numeric-sort
.
Вы должны выполнить следующую команду:
sort -n -k1 filename
Это должно сделать это :)
Используйте sort -nr для сортировки по убыванию. Ссылаться
Обратитесь к приведенной выше справочной странице для получения дополнительной информации.