GNU ordena líneas cirílicas ignorando mayúsculas y minúsculas

GNU ordena líneas cirílicas ignorando mayúsculas y minúsculas

Tengo un archivo en UTF-8 con líneas de letras latinas o cirílicas. Estoy tratando de solucionarlo, ignorando el caso.

Yo he tratado

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

pero todavía tengo líneas cirílicas en el orden incorrecto, mientras que las líneas en latín están bien ordenadas.

Ejemplo de archivo ordenado:

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

¿Cómo puedo gestionar esto? Gracias de antemano.

Respuesta1

Sospecho que "ru" no es una configuración regional válida. Pruebe el comando lang=ru localey vea si hay algún mensaje de error. En mi sistema, "ru" es una configuración regional no válida y "ru_RU" está en iso8859-5; necesitas ru_RU.UTF-8 para que funcione en 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 el juego de caracteres utilizado para una configuración regional, puede utilizar la localeherramienta:

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

Tenga en cuenta que las configuraciones regionales se definen en categorías. La categoría LC_COLLATE es la que se utiliza para ordenar. Configurar LC_ALL los anulará todos, o puede configurar uno individualmente usando la variable de entorno nombrada, o puede establecer un valor predeterminado configurando LANG. La mayoría de la gente querrá configurar LANG para uso diario en lugar de LC_ALL.

En el resultado de la localeherramienta, las categorías establecidas en función de LC_ALL o LANG se mostrarán entre comillas, mientras que las categorías establecidas por sus propias variables (y la propia LC_ALL si está configurada, y LANG si LC_ALL no está configurada) se mostrarán sin comillas. Por ejemplo:

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

Respuesta2

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

información relacionada