Неправильное поведение команды сортировки?

Я попытался отсортировать содержимое файла в 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
14
задан 8 April 2015 в 12:47

2 ответа

Вы могли использовать 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 проигнорирует все не алфавитно-цифровые символы.

16
ответ дан 8 April 2015 в 12:47

Вид использует алфавитную и числовую сортировку, то же как мы, специальные символы как + - <>... проигнорированы, числа рассматривают числовые так 1, 2, 3.. прибывает прежде 11, 12 1066 1104 - видит!

, Таким образом, Ваш список замечен как: aa, ab, ab, ac, ac

8
ответ дан 8 April 2015 в 12:47

Другие вопросы по тегам:

Похожие вопросы: