
라틴어 또는 키릴 문자 줄이 포함된 UTF-8 파일이 있습니다. 사건을 무시하고 정리하려고 합니다.
나는 시도했다
LC_ALL="ru" sort --ignore-case in.txt
하지만 여전히 잘못된 순서로 키릴 문자가 있는 반면 라틴 문자는 잘 정렬되어 있습니다.
정렬된 파일의 예:
Apple
apple
Banana
banana
...
// but with cyrillic letters i got this:
...
Арбуз
Банан
арбуз
банан
어떻게 관리할 수 있나요? 미리 감사드립니다.
답변1
"ru"가 유효한 로캘이 아닌 것 같습니다. 명령을 시도 lang=ru locale
하고 오류 메시지가 있는지 확인하십시오. 내 시스템에서 "ru"는 잘못된 로캘이고 "ru_RU"는 iso8859-5에 있습니다. utf-8에서 작동하려면 ru_RU.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을 설정하여 기본값을 설정할 수 있습니다. 대부분의 사람들은 LC_ALL보다는 일상적인 사용을 위해 LANG을 설정하기를 원할 것입니다.
도구 출력에서 locale
LC_ALL 또는 LANG을 기반으로 설정된 범주는 따옴표로 표시되는 반면, 자체 변수로 설정된 범주(설정된 경우 LC_ALL 자체, LC_ALL이 설정되지 않은 경우 LANG)는 따옴표 없이 표시됩니다. 예를 들어:
$ 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
арбуз
Арбуз
банан
Банан
кофе
Кофе