Сортировка файла .csv по алфавиту работает неправильно, если в нем есть дефис

Хорошо. Сам разобрался... в конце концов. Проблема в том, что Ubuntu был установлен с зашифрованным домашним каталогом. Вот почему файлы в ~/.sshне были доступны службе, пока я не вошел в систему (, поэтому расшифровал домашний каталог )и перезапустил его.

Снять шифрование было непросто. Я нашел эти инструкции лучшими.

0
12.08.2018, 22:25
1 ответ

Фон

Неясно, какую версию sortвы используете, но в системе CentOS 7.x используется эта версия вроде:

$ sort --version
sort (GNU coreutils) 8.22

И этот образец входного файла:

$ cat file
other data
Acid
other data
Acid
-acid
Acid
-acid
Acid

Это похоже на то, что вы ищете в выводе:

$ sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

Язык и регион

В приведенном выше примере моя локаль установлена ​​следующим образом:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Вы можете получить полный список этой командой:

$ locale -a
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER@saaho
...

Если вы столкнулись с проблемой, связанной с вашей локалью, вы можете указать sortиспользовать локаль Cдля решения этих проблем:

$ LC_ALL=C sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

Если у вас есть языковой стандарт, такой как de_DE, сортировка будет другой:

$ LC_COLLATE=de_DE sort -k1 file
Acid
Acid
Acid
Acid
-acid
-acid
other data
other data

Опять же, чтобы контролировать это, вы можете установить локаль на C.

Ссылки

0
28.01.2020, 04:15

Теги

Похожие вопросы