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
Мартин Турной
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.