Você pode usar o seguinte programa awk
:
awk -v s=" OK" '/OK$/ { print; } !/OK$/ { print $0 s; s=""; }'
Funciona assim:
/OK$/ { print; }
imprime qualquer linha que termine em OK
, enquanto
!/OK$/ { print $0 s; s=""; }
imprime qualquer linha não que termina em OK
com o valor da variável s
anexada.
Variável s
inicialmente é a string ' OK'
. Ele muda para a string vazia após o primeiro encontro de uma linha que não termina em OK
.
Atualizar
Ainda mais conciso:
awk -v s=" OK" '!/OK$/ { print $0 s; s=""; } /OK$/'
elimina a ação { print; }
da condição /OK$/
, pois { print; }
é a ação padrão.
Correção
Olhando a questão novamente, ela não diz que OK
deve ser adicionado à primeira linha que não tenha OK
, mas sim que a primeira linha não tenha um OK
que siga uma linha que tem um OK
. Portanto, devemos manter uma variável, c
, que sinalize pelo menos uma linha OK
, e uma variável d
que sinaliza que estamos prontos:
awk ' /OK$/ { if (!d) c=1; }
!/OK$/ { if (c) d=1; }
c && d { s=" OK"; c=0; }
{ print $0 s; s=""; }'