Это может работать для вас (GNU sed):
sed -nE 'N;h;s/(.*)(\n.*)/\n\1 \2 /;:a;s/(\n(\S+\s+).*\n.*)\2/N\1/;s/\n\S+\s+/\n/;ta;/^N{3}/{g;s/.*\n//p};g;D' file
Решение состоит из трех частей:
Часть первая
Aинициируется перемещение окна из 2 строк.
Копируется нетронутое пространство шаблона, содержащее текущее окно из 2 строк.
Новая строка добавляется к пространству шаблона и дополнительные пробелы добавляются кконцы обеих линий.Новая строка действует как разделитель для уникального числа слов, а пробелы позволяют совпадать конечным словам в каждой строке.
Часть вторая
Запущена петля сопоставления с образцомкоторый первое слово и его следующие пробелы сопоставляются с любым из слов во второй строке.Если найдено совпадение, это слово удаляется из второй строки, а счетчик увеличивается до введенного символа новой строки.Первое слово в первой строке удаляется, и процесс повторяется до тех пор, пока в первой строке не останется больше слов.
Счетчик проверяется на требуемое количество совпадений и, если признается истинным, копияпространство шаблона обновляется, первая строка удаляется, а вторая печатается.
Часть третья
Независимо от вышесказанного, пространство шаблона обновляется,удалена первая строка, и процесс повторяется до конца файла.
Приведенное выше решение печатает строки из N или более совпадений (в приведенном выше решении N устанавливается равным 3, как в примере OP) только для Nиспользование спичек:
sed -nE 'N;h;s/(.*)(\n.*)/\n\1 \2 /;:a;s/(\n(\S+\s+).*\n.*)\2/N\1/;s/\n\S+\s+/\n/;ta;/^N{3}\n/{g;s/.*\n//p};g;D' file