make awk print a linha que combina com uma variável e as próximas n linhas e usa uma variável no awk [duplicado]

1

Com uma matriz de elementos e um arquivo de entrada, quero fazer um loop pela matriz e corresponder cada elemento com o arquivo de entrada. Eu quero então obter a linha no arquivo de entrada onde este elemento está ocorrendo e as 3 linhas que seguem diretamente abaixo. Eu tentei fazer assim:

for variable in $array
do
awk -v var="$variable" '/var/{x=NR+3}(NR<=x){print}' inputfile.txt
done

Mas isso não retornou a saída desejada. Eu então tentei o grep:

for variable in $array
do
grep -A 3 "$variable" inputfile.txt
done

E isso funciona. Acho que resolvi meu problema, mas como gostaria de ter uma melhor compreensão do awk, resolvi postar essa pergunta, pois estou curioso para saber o que estou fazendo de errado quando tento alimentar uma variável. Eu acho que posso estar confuso porque a peça que eu peguei, é sem parte BEGIN? Eu estou supondo que uma parte BEGIN é assumida e não é necessária? Meu problema pode ser resolvido com o awk? O awk é a melhor ferramenta para esta tarefa? E meu exemplo de awk pode ser reescrito para ter uma seção BEGIN e END, então ele combina com os exemplos e tutoriais no awk que eu observei em outros lugares na internet? Obrigado

    
por sku2003 22.08.2017 / 22:15

1 resposta

3

O problema é que você não pode colar uma variável var no padrão de regex /var/ . Em vez disso, combine a linha inteira $0 com essa variável (nesse caso, ela será tratada como padrão de regex)

awk -v var="$variable" '$0~var{x=NR+3}(NR<=x){print}' inputfile.txt
    
por 22.08.2017 / 22:28