Если вы пытаетесь использовать значения в r.txt
как ключи для извлечения совпадающих многострочных -записей из s.txt
, попробуйте
awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= s.txt
r.txt
с разделителем записей по умолчанию (новой строки ), построение ассоциативного массива u
с ключами из второго поля, разделенного пробелами -; затем RS=
для переключения в режим абзаца для второго файла s.txt
в режиме абзаца, т.е. обработка каждой пустой -строки -разделенного блока как единой записи, последнее значение поля которой $NF
может затем использоваться в качестве значения поиска вu
$NF
существует в u
, вывести всю запись Чтобы добавить пробел между совпавшими записями:
Если у вас есть GNU awk (gawk
), вы можете использовать специальную переменную RT
, чтобы вернуть исходные разделители абзацев:
gawk 'NR==FNR {u[$2]++; next} $NF in u {print $0 RT}' r.txt RS= s.txt
В более общем смысле,вы можете добавить одну дополнительную новую строку после каждой совпадающей записи:
awk 'NR==FNR {u[$2]++; next} $NF in u {print $0 "\n"}' r.txt RS= s.txt
или добавьте дополнительную новую строку к стандартному разделителю полей вывода :
awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= ORS='\n\n' s.txt