выделенные кнопки мыши на lenovo x1 carbon

Попробуйте:

awk 'FNR==NR{re=re (re?"|":"")$0;next} /^"GRP_START"/{if (rec~re)print rec; rec=$0;next} {rec=rec"\n"$0} END{if (rec~re)print rec}' keywords.txt basefile.txt 

Пример:

$ awk 'FNR==NR{re=re (re?"|":"")$0;next} /^"GRP_START"/{if (rec~re)print rec; rec=$0;next} {rec=rec"\n"$0} END{if (rec~re)print rec}' keywords.txt basefile.txt 
"GRP_START","LINE1"........
"A"
"B--BOOM"
"C"
"GRP_START","LINE1"........
"A"
"B--DOOM"
"C"
"D"
"E"
"F"
"G"
"GRP_START","LINE1"........
"E"
"F"
"G"
"C--MOOM"

Как это работает

  • FNR==NR{re=re (re?"|":"")$0;next}

    Читая первый файл, keywords.txt, мы строим регулярное выражение для соответствия любому из слов. Например, для данных образца создается переменная re со значением BOOM|DOOM|MOOM.

  • /^"GRP_START"/{if (rec~re)print rec; rec=$0;next}

    Каждый раз, когда мы достигаем начала новой записи, мы проверяем, соответствует ли последняя запись, хранящаяся в rec, регулярным выражениям, хранящимся в re. Если да, то мы выводим ее. Далее rec сбрасывается на текущую строку, и мы пропускаем остальные команды и переходим к строке next.

  • rec=rec"\n"$0

    Для всех остальных строк мы добавляем их к rec.

  • END{if (rec~re)print rec}

    После завершения чтения файла мы проверяем, соответствует ли последняя запись регексу re, и если да, то печатаем ее.

0
26.06.2015, 22:28
0 ответов

Теги

Похожие вопросы