файл со строками (aa ac a-b) unix сортирует до (aa a-b ac) вместо ожидаемого (a-b aa ac)
это как будто sort игнорирует символ '-'.
Интересно, что дефис сам по себе отсортирован правильно (a b c -) сортируется в (- a b c).
Зачем? как-нибудь изменить это поведение?
Поведение порядка сортировки сортировать (1) контролируется настройками вашего региона (см. man locale
).
Существует ряд различных настроек локали, например:
$ 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_ALL=
Чтобы выбрать желаемое поведение сортировки, вам необходимо выбрать правильное значение LC_COLLATE. В этом случае подойдет стандартная встроенная локаль C (POSIX):
$ sort testcase
aa
a-b
ac
$ LC_COLLATE=C sort testcase
a-b
aa
ac
При желании вы можете установить все настройки локали (чтобы они были более согласованными), установив LC_ALL = C. Поскольку это переменные среды, вы можете навсегда установить порядок сортировки с помощью export LC_ALL=C
или что-то подобное в сценарии запуска оболочки.
установка переменной среды LC_ALL = C изменяет поведение сортировки. Порядок сортировки локали по умолчанию должен обрабатывать "-" специально.