O seguinte script awk
lerá o arquivo de dados e armazenará temporariamente cada registro na variável lines
. Se a palavra-chave na variável word
for localizada no registro, a variável do_output
será definida como 1 (verdadeira). Quando a palavra-chave foi encontrada e chegamos ao próximo registro ou ao final do arquivo, o registro da palavra-chave é gerado.
#!/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;
}
}
Teste:
$ awk -v word="MOOM" -f script.awk basefile.txt
"GRP_START","LINE1"........
"E"
"F"
"G"
"C--MOOM"
Então, é só uma questão de percorrer as palavras-chave desejadas:
#!/bin/sh
while read -r word; do
awk -v word="$word" -f script.awk basefile.txt
done <keywords.txt >finalfile.txt
Sugestão para melhoria futura: leia primeiro as palavras-chave em uma matriz e depois analise o arquivo basefile.txt
data apenas uma vez.