Следующий awk
сценарий прочитает файл данных и временно сохранит каждую запись в переменной lines
. Если в записи найдено ключевое слово из переменной word
, то переменная do_output
устанавливается в 1 (true). Когда ключевое слово найдено и мы либо достигаем следующей записи, либо конца файла, запись с ключевым словом выводится.
#!/usr/bin/awk -f
/^"GRP_START"/ {
if (do_output) {
exit;
}
lines = $0;
next;
}
$0 ~ word {
do_output = 1;
}
{
lines = sprintf("%s\n%s", lines, $0);
}
END {
if (do_output) {
print lines;
}
}
Тестирование:
$ awk -v word="MOOM" -f script.awk basefile.txt
"GRP_START","LINE1"........
"E"
"F"
"G"
"C--MOOM"
Затем просто перебираем нужные ключевые слова:
#!/bin/sh
while read -r word; do
awk -v word="$word" -f script.awk basefile.txt
done <keywords.txt >finalfile.txt
Предложение для будущего улучшения: Сначала считывать ключевые слова в массив, а затем разбирать файл данных basefile.txt
только один раз.