присоединиться - файл отсортирован

1063
diego9403

Я пытался объединить два файла, но я не знаю, почему объединение не слушает меня.

Файл я:

1 afjsadfjasdf 3 afdadsfa 4 afjdsakjfads 5 asdfadsfads 9 asfadsfads 

Файл k:

1 fdasdfadsfads 2 dfasjfadsjfas 3 dsafadsfadsf 4 asfdasdfadsf 9 asdfadsfadsfa 10 adsfadsfa 

Моя команда:

join -1 1 -2 1 i k >ik 

И ошибка:

join: k:6: is not sorted: 10 adsfadsfa 

Не могли бы вы сказать мне, почему это не работает?

0

1 ответ на вопрос

1
jcbermu

Use --nocheck-orderto make it work. The change from 1 digit to 2 digits produce the error. Also, by default, join compares the first column of each file, you don't need the -1 1 -2 1 part.

@ diego9403, для расширения `join` требует, чтобы файлы сортировались ** лексически **. Согласно словарю, слово «10» идет после «1», но перед «2». Другой способ написать вашу команду: `join -j 1 <(sort i) <(sort k)` glenn jackman 8 лет назад 2
@glennjackman Я уже применил решение `--nocheck-order`, но мне все еще было интересно, почему оно так себя ведет, и на странице руководства нет упоминаний о лексической сортировке, так что спасибо за эту информацию, это имеет смысл сейчас (что-то вроде использования `sort` без флага` -n`, поведение такое же) linux_newbie 5 лет назад 0
Моя справочная страница join (1) гласит: «Важно: FILE1 и FILE2 должны быть отсортированы по полям объединения». плюс больше информации. Вы спрашиваете * почему * для объединения требуется сортировка файлов? Для эффективности / точности я полагаю: соединение объединяется, если файлы сортируются. glenn jackman 5 лет назад 0

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