Filtrando entradas para arquivo de texto

1

Estou usando o Raspberry Pi (executando o raspbian) e tenho um shellscript emitindo continuamente valores para o textfile através deste comando:

wavemon -d |grep -i signal >> textfile.txt

A saída é como mostrado abaixo:

signal level: 20 dBm (100.00mW)

Pergunta: Como posso remover as outras palavras ( nível de sinal: dBm (100.00mW) ) e apenas inserir o número no arquivo de texto para que o arquivo de texto mostre apenas o número (20)?

    
por JolyDroneSP 08.01.2016 / 16:01

5 respostas

2

com grep :

wavemon -d | grep -oP 'signal level: \K[0-9]+'
  • -o imprime apenas a parte correspondente
  • -P ativa expressões regulares compatíveis com Perl PCRE ( \K )
  • signal level: \K[0-9]+ procura o padrão signal level: e, em seguida, \ K redefine o início da correspondência para a posição atual e [0-9]+ corresponde a um ou mais dígitos.
por 08.01.2016 / 16:37
1

Você pode usar o programa cut desta maneira:

cat textfile.txt | cut -d':' -f2 | cut -d' ' -f2

Veja como funciona:

Primeiro divida seu texto signal level: 20 dBm (100.00mW) no delimitador "dois pontos" com a opção -d':' e escolha o segundo campo com a opção -f2 .

Em seguida, divida o resultado 20 dBm (100.00mW) no delimiter "space" e pegue o segundo campo novamente.

    
por 08.01.2016 / 16:18
0

Você pode usar awk para isso, supondo que os campos sejam confiáveis:

wavemon -d | awk -v IGNORECASE=1 '$1 ~ /signal/ {print $3}' >> textfile.txt

ou se você quiser apenas filtrar esse arquivo como ele já foi criado

cut -f3 -d " " textfile.txt
    
por 08.01.2016 / 16:39
0

Você pode usar sed extrair o primeiro número de cada linha:

wavemon -d | sed 's/^[^0-9]\+ \([0-9]\+\) .*$//'

Em que ^ corresponde ao início de uma linha, $ ao final de uma linha e é alocador de espaço, o que estiver dentro de \(\) . A expressão [^0-9] significa corresponder a qualquer caractere, mas um dígito.

    
por 09.01.2016 / 09:30
-2

Já que você está no pi de framboesa, você pode fazer isso da maneira python.

import re
w=open("newfile.txt",'w')
with open('textfile.txt') as f:
    a=re.findall(r'\d+',f.readline())
    w.write(a[0])
    
por 08.01.2016 / 16:30