Что-то не так с вашим вопросом: вы утверждаете, что используете $'\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 .