Неправильное поведение команды сортировки?
Я попытался отсортировать содержимое файла на рабочем столе Ubuntu 14.04 (Trusty Tahr). В моем случае ожидаемый результат должен совпадать с оригинальным контентом, но фактический результат - нет. Зачем?
# cat test.txt
a++-a
a++-b
a++-c
ab
ac
# cat test.txt | sort
a++-a
ab
a++-b
ac
a++-c
2 ответа
Вы могли бы использовать LC_ALL
переменная, установите его в LC_ALL=C
перед звонком sort
$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac
Прочтите этот ответ, если вы хотите знать, что это волшебно LC_ALL=C
, Вот краткое резюме:
Язык C - это специальный язык, который должен быть самым простым языком. Можно также сказать, что в то время как другие локали предназначены для людей, локаль C предназначена для компьютеров. В локали C символы представляют собой отдельные байты, кодировка ASCII, порядок сортировки основан на значениях байтов.
Кроме того, как указал @KenMollerup, цитата из man sort
*** WARNING *** The locale specified by the environment affects sort
order. Set LC_ALL=C to get the traditional sort order that uses native
byte values.
Так что при использовании сортировки с LC_ALL=C
сортировать сравнивать символы по байт. Иначе sort
будет игнорировать все не буквенно-цифровые символы.
Сортировка использует алфавитную и числовую сортировку, также как и мы, специальные символы, такие как + - < > ... игнорируются, числа обрабатываются как числовые, поэтому 1, 2, 3.. предшествует 11, 12 1066 1104 - смотрите!
Таким образом, ваш список выглядит как: аа, а-а, а-а-а-а-а