расширение ответа codaddict:
grep -f file2 file1 | sort | uniq
это удалит строки, которые абсолютно одинаковы, но побочный эффект (который может быть нежелательным) состоит в том, что ваш файл данных теперь будет отсортирован.Также требуется, чтобы линии были точно одинаковыми, что не так в данных вашего примера.Имена совпадают, но данные после тех же имен разные.uniq
может использовать опцию подсчета полей или символов, но это не сработает с вашими данными, потому что ваши имена имеют переменную длину и переменное количество полей.Если вы знаете, что ваши поля данных всегда являются последними 3 полями в строке, то вы можете сделать это:
grep -f file2 file1 | sort | rev | uniq -f 3 | rev
ваш вывод будет только одно из каждого имени, но какое?самый низкий лексикографически, потому что он был отсортирован (sort
необходим для правильной работы uniq
).Если вы не хотите сначала сортировать его или должны быть осторожны с тем, какая из строк отброшена, то решение awk, perl, ruby или python, вероятно, будет работать лучше всего с использованием ассоциативных массивов.