Почему ** сортировка ** не сортирует одинаково на каждой машине? - PullRequest
12 голосов
/ 26 августа 2008

Использование одной и той же команды sort с одним и тем же вводом дает разные результаты на разных машинах. Как мне это исправить?

Ответы [ 4 ]

20 голосов
/ 26 августа 2008

Страница man в OS X говорит:

******* ПРЕДУПРЕЖДЕНИЕ ******* Локаль, указанная средой, влияет на порядок сортировки. Установите LC_ALL = C, чтобы получить традиционный порядок сортировки, который использует собственные значения байтов.

что может объяснить вещи.

Если некоторые из ваших систем не имеют поддержки локали, они по умолчанию будут использовать эту локаль (C), поэтому вам не нужно будет устанавливать ее для них. Если у вас есть такие, которые поддерживают локали и хотят того же поведения, установите LC_ALL=C в этих системах. Это было бы способом, чтобы столько систем, сколько я знаю, делали это одинаково.

Если у вас нет систем без локали, достаточно будет просто убедиться, что они используют общую локаль.

Дополнительную каноническую информацию см. В спецификации Single UNIX ®, версия 2 для locale , переменных среды , setlocale () и описании утилита sort (1) .

3 голосов
/ 26 августа 2008

Вероятно, это связано с различными настройками переменных среды locale . sort будет использовать эти настройки, чтобы определить, как сравнивать строки. Установив эти переменные среды так, как вы хотите, прежде чем вызывать sort, вы сможете заставить его вести себя определенным образом.

3 голосов
/ 26 августа 2008

Это может быть результатом региональных различий:

$ echo 'CO2_
CO_' | env LC_ALL=C sort
CO2_
CO_


$ echo 'CO2_
CO_' | env LC_ALL=en_US sort
CO_
CO2_

Установка переменной среды LC_ALL на то же значение должна исправить проблему.

2 голосов
/ 27 августа 2008

Более, чем вы когда-либо хотели знать о sort, прочитайте спецификацию sort в Single Unix Specification v3 . Это заявляет

Сравнения [...] должны выполняться с использованием последовательности упорядочения текущей локали.

IOW, как сортировка sort зависит от настроек языка (языка) среды, в которой работает скрипт.

...