Intereting Posts
undefined symbol: _ZN5boost15program_options11to_internalERKSs gdbserver как ненадлежащая сломанная труба Каковы корневые разрешения для файла? Рекурсивно переименуйте файлы электронной почты из .txt в .eml apt-get upgrade не устанавливает обновления через работу crontab Вопрос по установке программ – cmake / make v / s manual (?) Почему сетевые интерфейсы не работают в / dev как другие устройства? Как использовать SSD для кеширования, поэтому мои жесткие диски могут вращаться? Grub терпит неудачу, не может установить lubuntu Что значит 10.171.10.1 -> 10.171.10.2 в openvpn-созданном интерфейсе? несоответствие версии kmod-VirtualBox в Fedora 22 Проблема в файлах с защищенным копированием (scp) с пробелами Аргументы и применимость использования нескольких форм сжатия для одного или нескольких файлов? как использовать dd для заполнения диска с 1 Предотвратите автоматические EOFs по именованному каналу и отправьте EOF, когда я захочу

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

Я хочу отсортировать файл .csv, который содержит разные имена. Но есть проблема, когда имя имеет дефис в начале.

Я пробовал такие вещи, как:

sort -k1 -t sort -k1 -g -t sort -k1 -n -t 

вход:

 other data Acid other data Acid -acid Acid -acid Acid etc. 

выход:

 random data Acid -acid -acid Acid -acid etc. 

хочу:

 -acid -acid -acid Acid Acid etc. 

Фон

Неясно, какую версию 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

Рекомендации

  • Locale (компьютерное программное обеспечение) – Википедия
  • Locale – ArchLinux Wiki