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
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
grep -m5 -oP '\stime=\K\d+\.\d+(?=\s+ms$)' ping.text
sed -ne '2,6s/.* time=\([^ ]*\) ms//p' ping.text
Tags grep text-processing ping sed linux