противоречивое поведение сортировки - PullRequest
2 голосов
/ 18 июля 2010

У меня есть образец файла, содержащий символы «aA0_-» на каждом из них на одном. Сортировка с использованием GNU sort дает следующий порядок сортировки:

$ cat /tmp/sample | sort

_
-
0
a
A

после добавления какого-либо другого символа мы получаем другой порядок (не алфавитно-цифровые символы, кажется, имеют более низкий приоритет):

$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
 x
_x
-x

пока мы вставляем этот символ в начало, мы получаем исходный порядок сортировки:

$ cat /tmp/sample | sed 's/^/x/' | sort
x 
x_
x-
x0
xa
xA

.. Чем объясняется такое поведение?

UPDATE

когда в образец включены символы 'z' и 'Z', результат кажется еще более странным:

$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
 x
_x
-x
zx
Zx

.. но в свете правильного ответа это так, потому что все '', '_' и '-' являются пробелами в текущей локали (en_US.UTF-8) и не игнорируются при сортировке.

1 Ответ

4 голосов
/ 18 июля 2010

Ваш файл локали должен содержать определение LC_COLLATE. Это определяет порядок сортировки символов. Также проверьте определение LC_CTYPE и какие символы классифицируются как «пробел».

если '-' и '_' классифицированы как пробел, вы можете найти результаты, которые вы показали.

...