Bash род необычного порядка. Проблема с пробелами? - PullRequest
7 голосов
/ 20 декабря 2010

Много времени ушло на ошибку, которая прослеживается до сортировки ...

Может кто-нибудь объяснить, почему я получаю этот несортированный результат, когда документы bash говорят мне, что разделитель - это переход от белых к небелым символам? Разве первое поле не должно быть отсортировано?

>sort myfile.txt
10_10000000 19
10_10000001 20
10_10000002 19
10_10000003 17
10_10000004 16
10_1000000 44
10_10000005 16
10_10000006 16
10_10000007 17
10_10000008 16

Конечно, используя +0 -1, я получаю ожидаемый результат:

>sort +0 -1 myfile.txt
10_1000000 44
10_10000000 19
10_10000001 20
10_10000002 19
10_10000003 17
10_10000004 16
10_10000005 16
10_10000006 16
10_10000007 17
10_10000008 16

Некоторые метаинфо:

>type sort
sort is hashed (/bin/sort)

Я использую

sort (GNU coreutils) 5.97


>locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Ответы [ 2 ]

9 голосов
/ 21 декабря 2010

Я думаю, что вы видите проблемы, связанные с локалью.Некоторые (многие?) Локали влияют на работу сортировки, при этом определенные символы будут игнорироваться.В этом случае, похоже, что пространство между полями игнорируется, когда вы не указываете поля для сортировки.Уберите пробел, и вы увидите, что строка, которая выглядит так, как будто находится не в том месте, является правильной.

Если вы выполните сортировку с другим языковым стандартом, вы, вероятно, получите другой результат:

$ LANG=C sort myfile.txt

Моя локаль по умолчанию - en_AU.UTF-8, и я вижу ваши исходные результаты сортировки.Когда я устанавливаю LANG = C, я вижу ожидаемые результаты.

2 голосов
/ 20 декабря 2010

Мне подходит:

$ sort myfile.txt
10_1000000 44
10_10000000 19
10_10000001 20
10_10000002 19
10_10000003 17
10_10000004 16
10_10000005 16
10_10000006 16
10_10000007 17
10_10000008 16

$ sort --version
sort (GNU coreutils) 8.5

Возможно, вашей версии требуется флаг -n для включения числовой сортировки?

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