“sed” reescreve um arquivo para mostrar inteiros e remover os caracteres restantes

0

Eu pretendo produzir uma saída que possa ser usada para desenvolver uma média baseada em 5 ping de servidor. Estou correndo:

ping 8.8.8.8 -c 5 > ping.txt

quais saídas

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=46 time=29.331 ms
64 bytes from 8.8.8.8: seq=1 ttl=46 time=34.057 ms
64 bytes from 8.8.8.8: seq=2 ttl=46 time=33.978 ms
64 bytes from 8.8.8.8: seq=3 ttl=46 time=33.629 ms
64 bytes from 8.8.8.8: seq=4 ttl=46 time=48.414 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 29.331/35.881/48.414 ms

Então, pretendo remover os dados textuais em torno do tempo em ms para cada ping para o servidor, no momento, eu tenho:

sed 's/".*time=//' ping.txt > pingres.txt

Que não remove completamente todos os dados que eu exijo e gera como segue:

PING 8.8.8.8 (8.8.8.8): 56 data bytes
29.331 ms
34.057 ms
33.978 ms
33.629 ms
48.414 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 29.331/35.881/48.414 ms

Eu gostaria de mostrar os dados da seguinte maneira, mas esqueci alguns princípios do sed para conseguir isso e sou um novato.

29.331
34.057
33.978
33.629
48.414

Eu percebo que já existe uma média marcada na parte inferior do arquivo, mas eu preciso desse método por outras razões

    
por Ballard 27.03.2017 / 22:15

2 respostas

1

Você pode filtrar um pouco mais com grep para limitar as linhas que está visualizando:

$ ping 127.0.0.1 -c 5 | grep "bytes from" | sed -n -e 's/^.*time=//' -n -e 's/[^0-9\.].*$//p'
0.020
0.040
0.054
0.036
0.049
    
por 27.03.2017 / 22:32
1
grep -m5 -oP '\stime=\K\d+\.\d+(?=\s+ms$)' ping.text

sed -ne '2,6s/.* time=\([^ ]*\) ms//p' ping.text
    
por 27.03.2017 / 22:37