Imprimindo todas as linhas ao redor de uma string até coincidir com outra string [duplicada]

0

Eu tenho um conjunto de dados de exemplo em que uma seção tem campos que começam com "algo". Eu gostaria de obter todas as linhas em cada seção "algo" quando coincidir com uma seqüência específica de "1234".

Eu estava pensando que eu poderia procurar por "1234" e imprimir todas as linhas antes e depois até encontrar "alguma coisa".

Saída desejada:

something like this one
 1234
 abcd

something like this one
 zyxw
 1234 

Exemplo de conjunto de dados:

otherthings
otherthings
otherthings

something like this one
 1234
 abcd 

something not like this one
 xxxx
 yyyy 

something not like this one
 xxxx
 yyyy

something like this one
 1234
 abcd

otherthings
otherthings
otherthings
    
por lollan 21.04.2016 / 23:59

1 resposta

0

Usando o "awk":

#!/bin/sh

awk '
    function print_section() {
        # Only print section if "1234" was encountered
        if (valid == 1) print section;
    }
    {
        if (/something/) {
            # Start new section
            section = $0; 
        }
        else if (/^\s*$/) {
            # Empty line -> output previous section
            if (section ne "") {
                print_section();
                section = "";
                valid = 0;
            }
        }
        else if (section ne "") {
            # Add line to section if one has been started
            section = section "\n" $0;
            if (/1234/) valid = 1;
        }
    }
    END {
        # End of file, print current section if it exists
        print_section();
    }
' file
    
por 22.04.2016 / 01:19

Tags