сравнить два файла на совпадение, вывести только один, если найдено совпадение - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть два файла.Файл1 и Файл2.В File2 есть несколько повторяющихся записей, которые я не могу удалить из-за сложности структуры файла.Теперь, при генерации File3, который будет иметь соответствующие 1-й и 2-й столбцы между File1 и File2;Я хочу иметь только одну запись из File2 для сопоставления с шаблоном из File1.Какой лучший способ сделать это.Я попытался awk 'NR==FNR{a[$1,$2]=$0;next} ($1,$2) in a{print $0}' File1 File2, но он сохранил все соответствующие записи из File2

File1
ab 12
cd 24
ef 56

File2
ab 12
ab 12
ef 56

Что я получаю, это

File3
ab 12
ab 12
ef 56

Но я хочу, чтобы это было

File3
ab 12
ef 56

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Еще немного,

Ввод:

$ cat f1
ab 12
cd 24
ef 56

$ cat f2
ab 12
ab 12
ef 56

Ввод:

$ awk '{k=$1 SUBSEP $2}FNR==NR{a[k]; next}k in a && !a[k]++' f1 f2
ab 12
ef 56

Для лучшей читаемости ++a[k]==1 (с учетом заголовка темы "сравнить два файладля совпадения выведите только один, если найдено совпадение ")

$ awk '{k=$1 SUBSEP $2}FNR==NR{a[k]; next}k in a && ++a[k]==1' f1 f2
ab 12
ef 56
0 голосов
/ 27 ноября 2018

Вам нужно удалить запись из a после нахождения подходящей строки.

awk 'NR==FNR {a[$0]; next} ($0 in a) {delete a[$0]; print}' File1 File2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...