Puxar valores do arquivo de texto para criar novo arquivo

0

Gostaria de extrair valores específicos de um arquivo de texto não formatado para criar um novo arquivo com cada valor em uma única linha. Por exemplo, neste arquivo ...

Calculating outliers
Range of metric values: 0.016416 1.319020 
Found 8 outliers over 0.3
Generating EVs
Found spikes at  77 132 140 142 155 156 157 175
Script complete

Gostaria de extrair todos os valores entre "Encontrados picos em" e "Script concluído" para criar um arquivo semelhante a este

77
132 
140 
142 
155 
156 
157 
175

Também devo observar que nem sempre haverá o mesmo número de valores extraídos. Pode haver entre 0 e 20 valores.

    
por Rachel 30.07.2018 / 17:52

1 resposta

3
$ sed -n '/^Found spikes at  */s///p' file | tr ' ' '\n'
77
132
140
142
155
156
157
175

Isso usa sed para localizar a linha que começa com a string Found spikes at seguida por algum número de espaços. Quando a linha é encontrada, essa cadeia, incluindo os espaços antes dos números, é removida dela e o bit restante é impresso na saída padrão. A saída padrão de sed é lida por tr , que substitui qualquer espaço por uma nova linha.

Use um redirecionamento no final para salvar o resultado em um novo arquivo:

$ sed -n '/^Found spikes at  */s///p' file | tr ' ' '\n' >newfile

Modificado após comentário por ctac_ para remover a necessidade desse passo tr extra:

sed -n '/^Found spikes at  */s///p; y/ /\n/' file >newfile
    
por 30.07.2018 / 18:19