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