Подтвердить что ты не робот

UNIX сортировка с экспоненциальными значениями?

У меня есть файл csv с 7 полями данных. Я хочу отсортировать 7-е поле в обратном порядке (сначала наименьшие значения). 7-е поле данных выглядит следующим образом:

0.498469643137
1
6.98112003175e-10
9.11278069581e-06

Я попытался использовать инструмент сортировки UNIX следующим образом:

$ sort -t"," -n -k -r 7 <my_file>

Проблема, с которой я сталкиваюсь, заключается в том, что сортировка не распознает экспоненциальную форму. Например, sort считает, что 6.98112003175e-10 больше, чем 1. Как я могу использовать сортировку для сортировки столбца csv, но признать научную нотацию? Заранее спасибо за помощь.

4b9b3361

Ответ 1

сортировка с опцией '-g' должна сделать трюк для вас. -g указывает "использовать общее числовое значение" для сортировки

Ответ 2

Обратите внимание, что ваш язык может принимать другой разделитель: Например, в русской локализации символ "," ограничивает части номера, а не ".". В этом случае вы должны учитывать переменную LANG.

В моем случае LANG был установлен в ru_RU.KOI8-R, и поэтому sort -g дал мне неправильный результат.

Ответ 3

Итак - просто чтобы привести пример для тех, кто не знает, как его использовать: вместо "-n" вы используете "-g". l = 1,0.3,6.01e-10

sort -t$',' -n example.txt

0.3 1 6.01e-10

sort -t$',' -g example.txt

6.01e-10 0.3 1