Неожиданная проблема с join - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть два файла, оба содержат одинаковое содержимое и отсортированы по awk 'NR == 1; NR > 1 {print $0 | "sort -n"}'

file1.tmp:

contigID:totalAvgDepth
2011_07_08_contig_100000:3.17112
2011_07_08_contig_100001:1.81928
2011_07_08_contig_100002:2.96875
2011_07_08_contig_100003:2.37912

и file2.tmp:

contigID:GCContent
2011_07_08_contig_100000:59.6439169139466
2011_07_08_contig_100001:36.0759493670886
2011_07_08_contig_100002:67.6470588235294
2011_07_08_contig_100003:65.0602409638554
2011_07_08_contig_100004:64.7409172126266

Я использую join -t':' file1.tmp file2.tmp > merged.txt, и в конце я получаю эту ошибку:

join: file2.tmp:8: is not sorted: 2011_07_08_contig_10000:60.0273317389819
join: file1.tmp:16: is not sorted: 2011_07_08_contig_10001:3.16236

Когда я проверяю вручную, первый 2011_07_08_contig_10000 присутствует в file1.tmp и file2.tmp, но не присутствует в merged.txt. Однако 2011_07_08_contig_10001: присутствует везде.

Итак, я задаю следующие вопросы:

  1. Какой шаг работает неправильно?
  2. Как я могу это исправить?
  3. Когда я проверяю wc -l file1.tmp file2.tmp merged.txt, я получаю странный вывод
394278 file1.tmp
394278 file2.tmp
359112 merged.txt

, поскольку я ожидаю, что merged.txt будет идентичным file1,2 с точки зрения строк. Как правильно «выровнять» их?

Там явно что-то не так, есть идеи? Возможно, есть лучший способ?

1 Ответ

0 голосов
/ 16 апреля 2020

Попробуйте отсортировать файлы по столбцу, который вы используете для присоединения:

join -t: <(sort -t: -k1,1 file1.tmp) <(sort -t: -k1,1 file2.tmp) > merged.txt

Или используйте аналогичное заклинание при сортировке выходных данных awk.

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