Como posso filtrar os resultados do ping por tempo?

0

Como faço para filtrar quaisquer pings que estão abaixo de uma determinada ms, isto é, apenas respostas de eco de ping acima de 500 ms para o arquivo de texto?

IP=$1
SECONDS_Between_Pings=$2

ping -i $2 $1 | while read pong; do echo $(date) $pong; done >> ~/Downloads/pings_file_$(date +%Y-%m-%d).txt
    
por Jason 07.04.2015 / 14:36

2 respostas

6

grep com regex estendido:

ping ... | grep --line-buffered -E 'time=([0-9]{4}|[5-9][0-9]{2})' | ...

Isso corresponderá a qualquer linha com time= , seguida imediatamente por:

  • Any 4 digits (1000+ ms).
  • Um dígito 5-9 seguido por quaisquer 2 dígitos (500-999 ms).

--line-buffered trabalha com problemas causados pela saída padrão de grep buffer quando usado em uma cadeia de tubos. Não é necessário quando o grep é o último link da cadeia.

    
por 07.04.2015 / 15:00
0

Solução de Perl:

ping -i "$2" "$1" | while read pong; do echo $(date) "$pong" ; done \
  | perl -ne 'print if (/time=([0-9.]+)/)[0] > .5' >> ~/Downloads/...

Explicação: - ([0-9.]+) corresponde ao número decimal após time= e lembra disso - (...) [0] retorna o primeiro elemento da lista dada (necessário para mudar de lista para escalar)

    
por 07.04.2015 / 14:50