Eu tenho alguns dados onde a 4ª coluna será frz
ou -
. Eu gostaria de encontrar todas as linhas onde a 4ª coluna está frz
apenas se a 4ª coluna da próxima linha estiver -
e depois imprimir as duas linhas.
Exemplo de entrada:
2018-04-09T14:15:23.366Z 7 multi - uuid1 uuid2 uuid3 -
2018-04-09T14:15:23.978Z 8 multi frz uuid1 uuid3 - -
2018-04-09T14:29:35.826Z 8 multi frz uuid1 uuid3 uuid2 -
2018-04-09T17:19:01.901Z 8 multi frz uuid1 uuid3 uuid2 -
2018-06-03T22:12:38.688Z 8 multi - uuid1 uuid3 uuid2 -
2018-06-28T00:35:54.338Z 9 multi - uuid1 uuid2 - -
2018-06-28T00:47:51.679Z 9 multi - uuid1 uuid2 uuid3 -
2018-06-28T00:47:51.720Z 10 multi - uuid1 uuid3 - -
2018-06-28T00:47:58.863Z 10 multi - uuid1 uuid3 uuid2 -
2018-06-28T16:29:01.624Z 10 multi frz uuid1 uuid3 uuid2 -
2018-06-28T17:29:01.624Z 10 multi - uuid1 uuid3 uuid2 -
Saída esperada:
2018-04-09T17:19:01.901Z 8 multi frz uuid1 uuid3 uuid2 -
2018-06-03T22:12:38.688Z 8 multi - uuid1 uuid3 uuid2 -
2018-06-28T16:29:01.624Z 10 multi frz uuid1 uuid3 uuid2 -
2018-06-28T17:29:01.624Z 10 multi - uuid1 uuid3 uuid2 -
Encontrei alguns awk
comandos para imprimir a linha após uma correspondência, mas não consigo descobrir como combinar as duas linhas e imprimir ambas.
O que tenho atualmente:
$ awk 'f{print;f=0} $4=="frz"{f=1}' input
2018-04-09T14:29:35.826Z 8 multi frz uuid1 uuid3 uuid2 -
2018-04-09T17:19:01.901Z 8 multi frz uuid1 uuid3 uuid2 -
2018-06-03T22:12:38.688Z 8 multi - uuid1 uuid3 uuid2 -
2018-06-28T17:29:01.624Z 10 multi - uuid1 uuid3 uuid2 -
Que tal:
Se você tem GNU grep e seu padrão não ocorre em nenhum outro lugar nos dados, você pode tentar isto:
Explicação
A primeira
grep
captura todas as linhas onde o padrão ocorre, mais a próxima:A saída deste primeiro comando em sua entrada de exemplo é:
Em seguida, o segundo comando procura por linhas que não contenham o padrão e as imprime com a linha antes de:
Conforme observado na página man do grep , a saída contém separadores de grupo(
--
):Você pode adicionar um terceiro
grep
para removê-los, se necessário:Eu gostaria de oferecer uma
grep
abordagem GNU completamente impraticável. Funciona, mas parece desagradável.Exemplo.
Você pode tentar este sed também