UNIX сортировка с экспоненциальными значениями? - PullRequest
40 голосов
/ 14 сентября 2011

У меня есть CSV-файл с 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, но признать научную запись? Заранее спасибо за помощь.

Ответы [ 3 ]

66 голосов
/ 14 сентября 2011

сортировка с опцией -g должна помочь вам. Опция -g указывает «использовать общее числовое значение» для сортировки

9 голосов
/ 28 октября 2013

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

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

3 голосов
/ 04 апреля 2016

Итак - просто для примера для тех, кто не знает, как его использовать: вместо «-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

...