Почему утилита сортировки UNIX игнорирует начальные пробелы без опции -b? - PullRequest
7 голосов
/ 24 августа 2011

[Это переписывание аналогичного вопроса, который я задал задом наперед ... Извините за путаницу!]

Я запутался по поводу ведущих s и стандартной утилиты sort.Рассмотрим содержимое myfile:

a
 b
  a

Выполнение sort -t : myfile дает неожиданный результат, по крайней мере для меня:

a
  a
 b

Имеет ли это смысл?<space> должен предшествовать a-z (как в случае с ASCII) или после.В первом случае я ожидал бы

  a
 b
a

, тогда как во втором случае

a
 b
  a

Почему тогда sort, кажется, применяет опцию -b (игнорируя ведущие s) если когда не было включено?На самом деле, для безопасности я добавил опцию -t, чтобы в каждой строке было ровно одно поле.( В соответствии со стандартом POSIX , «Поле содержит максимальную последовательность неразделенных символов и, при отсутствии опции -t, любой предшествующий разделитель полей.» sort myfile дает тот же вывод, которыйтоже неожиданно.)

Заранее спасибо!

Ответы [ 2 ]

10 голосов
/ 24 августа 2011

Зависит от локали. С

LC_COLLATE=en_US.utf8 sort myfile

Я получаю ваш неожиданный результат, а с

LC_COLLATE=C sort myfile

Я получил ожидаемый результат. Также см. bash sort необычного заказа. Проблема с пробелами?

(я не знаю , почему sort обрабатывает -b и -t вот так.)

7 голосов
/ 24 августа 2011
$ sort -t : foo
a
    a
  b
$ env LC_ALL=C sort -t: foo
    a
  b
a

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

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