Сортировка не согласована с помощью команды Unix `sort '

Я выполняю команду:

zcat [File] | sed "1d" | sort -t $'\xE7' -k [field to be sorted] > [file].sorted 

Когда я запускаю это в файле A, сортируя по полю 1, я получаю следующий результат:

 11622400 , abe, def 11622401 , abe, def 11622402 , bbabe, def 11622403 , ddabe, def 11622404 , acdc, dere 11622405 , ddabe, bere 11622406 , abe, fgh 11622407 , adbed, ddee 11622408 , adbe, def 11622409 , abdde, def 1162240 , abe, deed 11622410, def,dede 

Но когда я запускаю ту же команду в сортировке файла 2 в поле 2, я получаю следующее:

 1162303, 116224 1162420, 1162240 11623062, 11622400 11623063, 11622401 11623064, 11622402 11623065, 11622403 11623066, 11622404 11623067, 11622405 11623068, 11622406 11623069, 11622407 11623070, 11622408 11623071, 11622409 1162421, 1162241 11623072, 1162410 

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

Я пытаюсь присоединиться к этим файлам с помощью команды объединения Unix, но поскольку они не упорядочиваются одинаково, это пропускает множество записей.

В чем причина этой проблемы?

Причина, по которой вы получаете эти результаты, заключается в том, что ваш тип не является числовым, он основан на канонических значениях столбцов.

Существует переключатель командной строки для сортировки, который будет сортироваться численно, это то, что вы хотите (введите «man sort» в вашей панели google)

В вашем вопросе что-то не так: вы утверждаете, что используете $'\xE7' в качестве разделителя записей, но этот байт не отображается в файле. Если это действительно команда, которую вы запускали, и это действительно ваши выходы, тогда файл A был отсортирован по всей строке, а файл B был отсортирован случайным образом (все поля 2 пустые, а sort по умолчанию нестабильна). Однако, поскольку файл 2 действительно сортируется во втором « , » -сепаратированном поле в вашем выходе из файла B, я предполагаю, что это ошибка в вашем вопросе, и либо ваш код использовал пробел или запятую как разделитель, либо ваши данные содержат байт E7, где ваши данные здесь имеют запятую и пробел.

Если вы передадите параметр -t чтобы установить разделитель для сортировки, вы должны передать тот же разделитель для join . В любом случае вам необходимо указать, join каким столбцам присоединиться. Например:

 <a.input sort -t $'\xE7' -k1 >a.sorted <b.input sort -t $'\xE7' -k2 >b.sorted join -1 1 -2 2 -t $'\xE7' a.sorted b.sorted >joined 

Кроме того, учитывая, что « 11622409 , » появляется перед « 1162240 , », в вашем выводе из файла A, похоже, что вы выполняете sort в локали, которая дает результаты, приближающиеся к правилам сортировки человека (только приближается, потому что sort не уточняется Достаточно, чтобы соответствовать довольно сложным правилам, используемым в серьезной типографии). Вы получите менее удивительные результаты, если вы измените свой язык на тот, который дает результаты, подходящие для потребления компьютеров. На практике это означает, что ваш параметр LC_COLLATE должен быть C (или его синонимом POSIX ). (Любой другой язык имеет тенденцию нарушать скрипты, которые используют sort , хотя на самом деле все должно быть в порядке.) Пример:

 $ cat a 11622409 , abdde, def 1162241 , abe, deed 11622410, def,dede $ LC_COLLATE=en_US sort <a 11622409 , abdde, def 11622410, def,dede 1162241 , abe, deed $ LC_COLLATE=C sort <a 11622409 , abdde, def 1162241 , abe, deed 11622410, def,dede 

Если вы используете join в той же локали, что и sort , вы должны быть в порядке. Обратите внимание: sort производит лексически отсортированный вывод, а не сортировку по цифре; Но это то, что вы хотите в качестве входа для join .

Пытаться:

 zcat [File] | sed "1d" | sort -tn $'\xE7' -k [field to be sorted] > [file].sorted 
  • Разрешения Unix-разрешения с пользователями, принадлежащими к той же группе, которые получают доступ к папке
  • Какие / где различия
  • В чем разница между командами Linux (Ubuntu) и Mac?
  • Какую команду мне нужно использовать для удаления файла с именем `-rf`?
  • Странные изменения прав при сохранении файла в разделе Samba из редактора Windows
  • Как перезагрузить .inputrc?
  • Почему разные окончания строк - Unix vs Windows
  • Есть ли сценарий, в котором необходим rm -rf -no-preserve-root?
  • Автоматически перезагружать работу Unix, если она опускается?
  • Unix / Linux найти и отсортировать по дате изменения
  • Безопасно избавиться от «У вас новая почта в / var / mail» на Mac?
  • Interesting Posts

    Удаленное закрытие открытых общих файлов

    Как включить автоматический вход в Windows 8

    Нет типа данных для узла: org.hibernate.hql.internal.ast.tree.IdentNode HQL

    Конструктор Java не компилируется должным образом

    Не удалось загрузить платформу на стороне клиента ASP.NET Ajax. когда класть ScriptManager на пустую страницу

    Подписанные / неподписанные сравнения

    Какую команду я могу использовать для перезагрузки загрузчика?

    Как оптимизировать функцию VBA в Excel

    Как установить гостевую ОС DOS с ОС HOST.?

    Прочитайте удаленный файл в java, который нуждается в имени пользователя и пароле

    WinXP – размещение пользовательских каталогов на вторичном разделе?

    Ошибка mySQL: # 1248 – Каждая производная таблица должна иметь свой собственный псевдоним

    Как восстановить папки с форматированного диска

    Как обрабатывать исключения в глобальном масштабе с помощью собственных обещаний в node.js?

    Как использовать sysprep и imagex для диска с одним, чем разделы?

    Давайте будем гением компьютера.