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ávelpreve 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#RETURNe o segundo campo for maior que 0, salve a linha comocur, defina a variávelprcomo 1 (verdadeiro) e vá para a próxima linha -
pr {printf "%s\n%s\n%s\n", prev, cur, $0; pr=0}: Seprfor true, imprima a saída no formato desejado e, finalmente, definaprcomo 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