Я попытался отсортировать содержимое файла в Ubuntu desktop 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
Вы могли использовать LC_ALL
переменная, установить ее на LC_ALL=C
прежде, чем звонить sort
$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac
Read этот ответ, если Вы хотите знать то, что это волшебно 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
, вид сравнивает символы bytewise. Иначе sort
проигнорирует все не алфавитно-цифровые символы.
Вид использует алфавитную и числовую сортировку, то же как мы, специальные символы как + - <>... проигнорированы, числа рассматривают числовые так 1, 2, 3.. прибывает прежде 11, 12 1066 1104 - видит!
, Таким образом, Ваш список замечен как: aa, ab, ab, ac, ac