GNU classifica linhas cirílicas ignorando o caso

GNU classifica linhas cirílicas ignorando o caso

Eu tenho um arquivo em UTF-8 com linhas em letras latinas ou cirílicas. Estou tentando resolver isso, ignorando o caso.

eu tentei

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

mas ainda tenho linhas cirílicas em ordem inadequada, enquanto as linhas em latim estão bem classificadas.

Exemplo de arquivo classificado:

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

Como posso gerenciar isso? Agradeço antecipadamente.

Responder1

Suspeito que "ru" não seja um local válido. Experimente o comando lang=ru localee veja se há alguma mensagem de erro. No meu sistema, “ru” é uma localidade inválida e “ru_RU” está em iso8859-5; você precisa de ru_RU.UTF-8 para que funcione em 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

Para encontrar o conjunto de caracteres usado para uma localidade, você pode usar a localeferramenta:

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

Observe que as localidades são definidas em categorias. A categoria LC_COLLATE é a usada para classificação. Definir LC_ALL substituirá todos eles, ou você pode definir um individualmente usando a variável de ambiente nomeada, ou pode definir um padrão definindo LANG. A maioria das pessoas desejará definir LANG para uso diário em vez de LC_ALL.

Na saída da localeferramenta, as categorias definidas com base em LC_ALL ou LANG aparecerão entre aspas, enquanto as categorias definidas por suas próprias variáveis ​​(e o próprio LC_ALL se definido, e LANG se LC_ALL não estiver definido) aparecerão sem aspas. Por exemplo:

$ 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=

Responder2

$ 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
арбуз
Арбуз
банан
Банан
кофе
Кофе

informação relacionada