неожиданный результат от сортировки GNU - PullRequest
6 голосов
/ 22 апреля 2010

, когда я пытаюсь отсортировать следующий текстовый файл 'input':

test1 3   
test3 2
test 4

с помощью команды

sort input

выход - это точно вход. Вот вывод

od -bc input

0000000 164 145 163 164 061 011 063 012 164 145 163 164 063 011 062 012
          t   e   s   t   1  \t   3  \n   t   e   s   t   3  \t   2  \n
0000020 164 145 163 164 011 064 012
          t   e   s   t  \t   4  \n
0000027

Это просто разделенный табуляцией файл с двумя столбцами. Когда я

sort -k 2

Выходная информация изменится на

test3 2
test1 3
test 4

что я и ожидал. Но если я сделаю

sort -k 1

ничего не меняется относительно ввода, тогда как я ожидаю, что `test 'будет сортироваться перед' test1 '. Наконец, если я сделаю

cat input | cut -f 1 | sort

Я получаю

test
test1
test3

как и ожидалось. Есть ли логическое объяснение этому? Что именно сортировка должна делать по умолчанию, что-то вроде:

sort -k 1

Моя версия сортировки:

sort (GNU coreutils) 7.4

1 Ответ

7 голосов
/ 22 апреля 2010

Из справочных страниц:

* ПРЕДУПРЕЖДЕНИЕ * Локаль, указанная средой, влияет Сортировать порядок. Установите LC_ALL = C, чтобы получить традиционный порядок сортировки, который использует родные байтовые значения.

Так что похоже export LC_ALL = C должно помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...