Почему не удалось присоединиться к Unix, хотя соответствующие записи существуют в двух файлах - PullRequest
1 голос
/ 07 декабря 2011

Я попробовал простое соединение

join query.txt source.tab

На основании 1-го столбца в обоих файлах. Понятно, что source.tab содержать запрос. Но почему операция не дает результата?

Файл запроса и исходный файл можно загрузить здесь:

http://dl.dropbox.com/u/11482318/query.txt  (2B)

http://dl.dropbox.com/u/11482318/source.tab (40KB)

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Справочная страница для join гласит, что (как предполагает укрытие):

Важное замечание: FILE1 и FILE2 должны быть отсортированы по полям соединения.

В вашем случае файл source.tab естественным образом сортируется по первому полю (r1.1, r2.1 и т. Д.). Но порядок сортировки, требуемый для соединения, будет основан на упорядоченной последовательности sort (возможно, r1.1, r10.1, r100.1, r11.1, r12.1 и т. д.)

Если вы сортируете файл source.tab с помощью команды sort, то присоединитесь, это должно сработать.

(Обратите внимание, что - возможно, по счастливой случайности - файл query.txt имеет правильный порядок сортировки.)

1 голос
/ 13 июня 2013

Команда join не вернет результаты, если файл имеет заголовок.Это приводит к тому, что join считает файл несортированным, и, таким образом, все совпадения с ключами меньше, чем у этого поля в заголовке.

Один из способов удалить заголовок - использовать grep -v ",Header2," file1.txt >file2.txt, а затем присоединиться к file2.txt (при условии, что файл был отсортирован для начала).Другой вариант - просто отсортировать, как есть, оставив заголовок.Это будет работать, если строка заголовка не будет отображаться в конечном результате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...