com awk
:
awk '/END$/ {prev=$0; next}; /^#RETURN/ && $2>0 {cur=$0; pr=1; next};\
pr {printf "%s\n%s\n%s\n", prev, cur, $0; pr=0}' file.txt
-
/END$/ {prev=$0; next}
: Se a linha terminar comEND
, salve-a como variávelprev
e vá para a próxima linha; Esta é a linha antes deRETURN
-
/^#RETURN/ && $2>0 {cur=$0; pr=1; next}
: Se a linha começar com#RETURN
e o segundo campo for maior que 0, salve a linha comocur
, defina a variávelpr
como 1 (verdadeiro) e vá para a próxima linha -
pr {printf "%s\n%s\n%s\n", prev, cur, $0; pr=0}
: Sepr
for true, imprima a saída no formato desejado e, finalmente, definapr
como 0 (false)
Exemplo:
% cat file.txt
#[Tue Oct 25 00:00:02 2016] --- START OUTPUT
#CMD: XXX
END-->0<--
#[Tue Oct 25 00:00:57 2016] --- END
#RETURN: 1
#ELAPSED TIME (in seconds): 55
#[Tue Oct 25 00:05:01 2016] --- START OUTPUT
#CMD: XXX
END-->0<--
#[Tue Oct 25 00:05:33 2016] --- END
#RETURN: 0
#ELAPSED TIME (in seconds): 32
% awk '/END$/ {prev=$0; next}; /^#RETURN/ && $2>0 {cur=$0; pr=1; next}; pr {printf "%s\n%s\n%s\n", prev, cur, $0; pr=0}' file.txt
#[Tue Oct 25 00:00:57 2016] --- END
#RETURN: 1
#ELAPSED TIME (in seconds): 55