Чи зламаний сорт gnu coreutils?


10

Розгляньте наступний вхід для сортування:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

Тепер спробуйте запустити sort foo

Висновок не сортується при спробі цього на будь-якому моєму linux-коробках (gnu coreutils версії 6.9-7.4). Вихід сортується під час роботи під cygwin (gnu coretuils 8.5). Коментарі?

Відповіді:


18

Сортування залежить від місцевості; конкретно, це залежить від $LC_COLLATE(можливо, переосмисленого $LC_ALL), повернення до якого, $LANGякщо його не існує. Команда localeпокаже вам, з якими значеннями ви ефективно працюєте. Див man 3 strcoll, man 3 setlocaleі т.д.

LC_COLLATE=C(або POSIXвзагалі немає локалі) призводить до суворого порівняння байт-байт.

LC_COLLATE=en_US.utf8 приводить до алфавітно-еквівалентного сорту, при цьому розділові знаки ігноруються та символи в одному класі еквівалентності трактуються однаково


Дійсно, export LC_COLLATE=Cзмушує сортувати себе так, як і очікувалося
Лев Алексєєв

3
Акценти не повністю ігноруються. Stephaneсортування раніше Stéphane , але Stephanieсортування після Stéphane. éеквівалентно e(як ê, ë, ...), але якщо є зв'язок, то порядок між тим , добре визначений. Те саме в старому доброму паперовому словнику.
Стефан Шазелас

Якщо ви дійсно хочете знати це все: unicode.org/reports/tr10
Martin Tournoij
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.