У меня есть разделенный запятыми файл, который выглядит следующим образом:
100,00869184
6492,8361
1234,31
200,04071
Я хочу использовать sort
для сортировки этого файл с числовым программным путем в только первом столбце .
Желаемый результат:
100,00869184
200,04071
1234,31
6492,8361
Как мне добиться этого с помощью сортировки? Кажется, что запятые обрабатываются как разделители тысяч, а не как разделители, даже когда я их так называю.
Оба sort -t',' -n
и sort -t',' -nk1'
дай мне это:
1234,31
200,04071
6492,8361
100,00869184
Сортировка по умолчанию (без параметров) или использование sort -t','
дает мне это:
100,00869184
1234,31
200,04071
6492,8361
И сортировка по числу sort -n
дает мне это:
1234,31
200,04071
6492,8361
100,00869184
Как я могу использовать сортировку для достижения желаемого результата?
Отредактировано, чтобы добавить: Это для одноразовой операции, чтобы создать отсортированный список приблизительно из 7 миллионов строк, таким образом, обходные пути или другие неортодоксальные методы вполне приемлемы.
-t
опция имеет пробел между-t
и символомОтветы:
Это, конечно, грязный обходной путь, но я нашел способ сделать это благодаря подсказке @ slhck о локалях. Если придет лучший ответ, который будет более полезным для других, я, безусловно, приму его, поскольку это в значительной степени работает только для моей конкретной проблемы.
Я установил для испанского (боливийского) языковой стандарт, чтобы запятые обрабатывались как десятичные точки, а затем с помощью стандартной числовой сортировки.
источник
GNU
sort
делает это по умолчанию:Версия:
Там один нюанс , хотя: Если сортировка не работает , как ожидалось, то ваш
locale
, вероятно , установлен на что - то другое , чемC
. Почему это?locale
определяет сортировку и интерпретацию букв, цифр, десятичных символов и так далее.Чтобы проверить это, просто войдите
locale
в Терминал. Является лиLC_NUMERIC
установленen_US.UTF-8
, может быть? Это объясняет неправильный порядок сортировки. Установите его обратно наC
:Затем попробуйте свою
sort
команду снова. Если вы хотите установить глобальное значениеlocale
наC
, сделайте это с:источник
locale
проблема. Но чтоsort --version
для тебя на самом деле?--
команды не работали для меня в прошлом либо. Я проверил страницу справочника, и там нет явной версии, но в ней есть «HP-UX 11i Version 2: August 2003», если это поможет. Мой LC_NUMERIC установлен на "C".,
в качестве десятичного разделителя. Я никогда не использовал HP-UX, хотя.Попробуйте добавить
-g
опцию, которая должна выполнять числовую сортировку.Пытаться:
источник
-n
цифровая сортировка? -г дает мне нелегальный вариант.-g
этоgeneral-numeric-sort
опция, которая должна быть доступна в любой последней версииsort
. @dpatcheryЗаменить разделитель:
- должен помочь тебе.
источник