сравнить два файла на совпадение, распечатать все найденные совпадения - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь сравнить каждую запись в столбце 1 файла 1 с файлом 2 и вывести оба.Столбец1 файла1 может иметь повторяющуюся запись.В случае дублирования ввода я вижу только одну строку вывода;но я хочу и то и другое

Мой код: awk 'FNR==NR{a[$1]=$0;next}; $1 in a {print $0"\t"a[$1]}' File1.txt File2.txt

File1.txt

aa  c   d
aa  c   e

File2.txt

aa  5
aa  7
aa  9
bb  7
cc  1

Ожидаемый результат

aa  5   aa  c   d
aa  7   aa  c   d
aa  9   aa  c   d
aa  5   aa  c   e
aa  7   aa  c   e
aa  9   aa  c   e

Какой я мой код даю

aa  5   aa  c   e
aa  7   aa  c   e
aa  9   aa  c   e

Ответы [ 2 ]

1 голос
/ 03 июля 2019

с sort/join

$ join <(sort file2) <(sort file1) -o1.1,1.2,2.1,2.2,2.3

aa 5 aa c d
aa 5 aa c e
aa 7 aa c d
aa 7 aa c e
aa 9 aa c d
aa 9 aa c e
1 голос
/ 03 июля 2019

Это случай для команды join:

$ join File{1,2}.txt
aa c d 5
aa c d 7
aa c d 9
aa c e 5
aa c e 7
aa c e 9

Вывод не совсем то, что вы хотите, поэтому давайте исправим это:

$ join File{1,2}.txt | awk '{$1 = $1 FS $NF FS $1; $NF = ""; print}'
aa 5 aa c d
aa 7 aa c d
aa 9 aa c d
aa 5 aa c e
aa 7 aa c e
aa 9 aa c e

Еслитогда входные файлы не сортируются (при условии, что ваша оболочка bash / ksh / zsh)

join <(sort File1.txt) <(sort File2.txt)

См. 3.5.6 Замена процесса в руководстве по bash.

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