Recuperar linhas superior e inferior onde a linha do meio corresponde a um padrão?

1

Eu tenho um conjunto de dados (por exemplo, um arquivo) que se parece com isso:

4.048   5.9392765
4.051   5.9392765
4.068   5.9392765
4.293   5.9392765
4.3 "A random string"
4.331   5.9392765
4.429   6.0137865
4.609   6.0303125
4.662   6.0303125
5.626   6.1261205
5.815   6.1261205
6.347   6.1261205
6.543   6.1261205
6.7 "A random string"
7.420   6.1611095
7.526   6.2542085
7.541   6.2698285
7.556   6.2698285
7.928   6.2698285

Eu quero extrair grupos de três linhas (linhas) onde o segundo campo da linha do meio é uma string em vez de um número. Por exemplo, para a entrada acima, gostaria de obter a seguinte saída:

4.293   5.9392765
4.3 "A random string"
4.331   5.9392765
------------------------
6.543   6.1261205
6.7 "A random string"
7.420   6.1611095

Como posso fazer isso?

    
por RJF 25.04.2018 / 19:12

2 respostas

0

grep solução:

grep -C1 -E '^[0-9]+\.[0-9]+[[:space:]]+[^0-9[:space:]]+' file
  • -C NUM - print NUM linhas de contexto de saída
  • -E - regexp estendido
  • [^0-9[:space:]]+ - corresponde a qualquer caracter exceto o (s) espaço (s) branco (s) [:space:] ou dígito [0-9]

A saída:

51174.29300 2265.9392765
51174.3 "A random string"
51174.33100 2265.9392765
--
51176.54300 2266.1261205
51176.7 "A random string"
51177.42000 2266.1611095
    
por 25.04.2018 / 19:18
1

Uma resposta mais simples:

grep -C1 '"' file

que localiza as linhas que contêm um caractere de aspas ( " ) e as exibe, com uma linha antes e depois.

    
por 25.04.2018 / 19:26