2

У меня есть файл в UTF-8 со строками латинскими или кириллическими буквами. Я пытаюсь разобраться, игнорируя дело.

я пытался

LC_ALL="ru" sort --ignore-case in.txt

но все еще есть кириллические строки в порядке inpropper, в то время как строки в латинице сортируются нормально.

Пример отсортированного файла:

Apple
apple
Banana
banana
...
// but with cyrillic letters i got this:
...
Арбуз
Банан
арбуз
банан

Как я могу справиться с этим? Заранее спасибо.

2 ответа2

3

Я подозреваю, что "ru" не является допустимой локалью. Попробуйте выполнить команду lang=ru locale и посмотрите, есть ли какие-либо сообщения об ошибках. В моей системе "ru" является недопустимым языковым стандартом, а "ru_RU" находится в iso8859-5; вам нужен ru_RU.UTF-8, чтобы он работал в utf-8.

$ LANG=ru locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Чтобы найти набор символов, используемый для локали, вы можете использовать инструмент locale :

$ LANG=ru_RU locale -c -k charmap collate-codeset
LC_CTYPE
charmap="ISO-8859-5"
LC_COLLATE
collate-codeset="ISO-8859-5"

Обратите внимание, что локали определены в категориях. Категория LC_COLLATE используется для сортировки. Настройка LC_ALL переопределит все из них, либо вы можете установить один отдельно, используя именованную переменную среды, или вы можете установить значение по умолчанию, установив LANG. Большинство людей захотят установить LANG для ежедневного использования, а не LC_ALL.

В выходных данных инструмента locale категории, которые установлены на основе LC_ALL или LANG, будут отображаться в кавычках, тогда как категории, установленные их собственными переменными (и сам LC_ALL, если установлен, и LANG, если LC_ALL не установлен) будут отображаться без кавычек. , Например:

$ LANG=en_US.UTF-8 LC_MESSAGES=ru_RU.UTF-8 locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
...
LC_MESSAGES=ru_RU.UTF-8
...
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
2
$ cat input.txt 
banana
coffee
кофе
Банан
Apple
Coffee
арбуз
apple
Banana
Кофе
банан
Арбуз

$ export LC_ALL=en_US.UTF-8 && sort --ignore-case input.txt
apple
Apple
banana
Banana
coffee
Coffee
арбуз
Арбуз
банан
Банан
кофе
Кофе

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .