Bash: сортировать числа с показателями

Я пытался отсортировать один файл с числовыми значениями, например:

414e-05
435e-05
0.5361
0.7278
0.1341
0.9592
0.2664

С сортировкой все числа сортируются, кроме тех, которые имеют показатель экспоненты, есть ли способ сортировки для выражения этого выражения?

Ответы

Ответ 1

Если ваша версия команды sort достаточно новая, она должна поддерживать параметр -g (или --general-numeric-sort), если вам нравятся ваши варианты). Это описано в инструкции по эксплуатации:

Сортировать численно, используя стандартную функцию C strtod - конвертировать префикс каждой строки в плавающую точку с двойной точностью номер. Это позволяет указывать числа с плавающей запятой в научных обозначение, например "1.0e-34" и "10e100".

Ответ 2

 

perl -e 'print sort { $a<=>$b } <>' < input-file

Ответ 3

Если у вас нет sort -g, альтернатива, которую вы можете получить, это scisort.

Ответ 4

Мне не хватает представителя. комментировать, поэтому я пишу это, чтобы дополнить принятый ответ:

для тех, у кого есть локали, которые используют запятую вместо точки для обозначения десятичных дробей, сортировка десятичных дробей не будет работать должным образом, как указывает HongboZhu

Решение: сортировка списков с номерами, разделенными точками, будет работать правильно при использовании чего-то вроде следующей команды (важна LC_ALL = C):

ls yourFolder|LC_ALL=C sort -g

Это решение взято из следующего поста:https://unix.stackexchange.com/info/506965/bash-sort-g-does-not-work-properly