Como excluo as linhas subseqüentes após corresponder uma string ou um dígito? [duplicado]

0

Considere que eu tenho um arquivo grande contendo informações como (parte de cat file ):

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191
33.833035   -0.113242   1.157228
33.834034   -0.113157   1.157273
33.835033   -0.113071   1.157300

A primeira coluna contém números flutuantes em ordem crescente e suponho que eu queira remover toda a linha depois de 33.832035 assim - essa saída deve ser:

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191

Como faço isso com sed ou ferramenta de processamento de texto apropriada?

Eu tentei excluir todas as linhas após a primeira ocorrência de uma string em uma linha , mas não obtive êxito na implementação no meu caso.

    
por Pandya 02.03.2018 / 16:36

2 respostas

1

Uma pequena variante de uma das soluções para a questão vinculada incluirá a primeira linha correspondente:

sed '/33.832035/q'

Isso imprimirá todas as linhas até e incluindo a primeira linha contendo “33.832035” e depois sairá.

Qualquer outra linguagem de processamento de texto terá um equivalente semelhante; por exemplo, no AWK:

awk '1; /33.832035/ { exit }'

Isso imprime todas as linhas ( 1 , que sempre corresponde e faz com que o AWK aplique a ação padrão, que é imprimir a linha atual), e sai quando a linha atual corresponder a “33.832035“.

Em ambos os casos, você pode tornar a expressão regular mais restritiva, por exemplo, /^33.832035 / para corresponder apenas a um campo completo no início da linha.

    
por 02.03.2018 / 16:39
1

Awk abordagem:

awk '$1 == 33.832035{ print; exit }1' file

Exemplo de saída:

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191
    
por 02.03.2018 / 16:44