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