Excluir linha após keyword1 se keyword2 não existir

0

Como excluo linhas após "/ test1 / end" que não contém test1

test_long_sentence.txt:

20  /test1/catergory="Food"
20  /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20  /test1/type="Western"
20  /test1/theme="Halloween"
20  /test1/end=category
**This is some unwanted data blah blah blah**
20  /test1/Purpose=
20  /test1/my_purpose="To create 
a fun-filled moment"
20  /test1/end=Purpose
...

Resultado esperado:

20  /test1/catergory="Food"
20  /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20  /test1/type="Western"
20  /test1/theme="Halloween"
20  /test1/end=category
20  /test1/Purpose=
20  /test1/my_purpose="To create 
a fun-filled moment"
20  /test1/end=Purpose
...

Eu tentei:

grep -A1 'end' test_long_sentence.txt| sed 'test1/!d' test_long_sentence.txt > output.txt
    
por Jojoleo 12.02.2018 / 09:12

1 resposta

1

Tente:

$ awk '/test1/{f=0} !f{print}  /test1\/end/{f=1}' sentence.txt  
20  /test1/catergory="Food"
20  /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20  /test1/type="Western"
20  /test1/theme="Halloween"
20  /test1/end=category
20  /test1/Purpose=
20  /test1/my_purpose="To create 
a fun-filled moment"
20  /test1/end=Purpose

Como funciona

Quando o awk inicia, qualquer variável indefinida é, por padrão, falsa. Então, quando o awk começa f será falso. O awk então lerá cada linha e executará os três comandos a seguir:

  • /test1/{f=0}

    Para qualquer linha que contenha test1 , definimos a variável f como false (0).

    Quando estivermos em um intervalo de linhas que queremos imprimir, f será definido como falso.

  • !f{print}

    Se f for falso, imprima a linha atual.

  • /test1\/end/{f=1}

    Para qualquer linha que contenha test1/end , defina f como true (1).

    Isso sinaliza que não devemos imprimir as linhas que seguem até chegarmos a uma linha que contenha test1 .

Usando variáveis

awk -v a="test1" -v b="test1/end"  '$0~a{f=0} !f{print}  $0~b{f=1}' sentence.txt
    
por 12.02.2018 / 09:35