Imprimindo o resultado do ping em um formato simples como “10ms”

1

Sempre que executo "ping -c 1 www.google.com", recebo este resultado:

PING www.google.com (xxx.xx.xxx.xxx) 56(84) bytes of data.
64 bytes from xxxxxxxx-xx-xxxxxxxxxx.net (xxx.xx.xxx.xxx): icmp_seq=1 ttl=56 
time=25.8 ms

--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 25.816/25.816/25.816/0.000 ms

No entanto, gostaria de imprimir o ping em um formato simples como este:

[23:00:25] 25.8 ms

Como posso conseguir isso? Até agora eu tentei

ping -c 1 www.google.com | grep -oP '(?<=time\s/)w+' > ping.txt

para imprimir o ping sem o tempo, mas como você provavelmente adivinhou, não funcionou.

    
por Lucavon 18.06.2017 / 23:02

2 respostas

0

Tente

ping -c 1 www.google.com | awk 'NR==2{print strftime("[%T]",systime()),substr($8,6),"ms"}'

Agarra a hora atual usando systime() e formata-a na apresentação% T (hh: mm: ss) usando strftime . Em seguida, imprime a parte relevante do campo 8, para remover o time= de absurdo.

Exemplo

ping -c 1 www.google.com | awk 'NR==2{print strftime("[%T]",systime()),substr($8,6),"ms"}'
[21:32:05] 1.03 ms
    
por 18.06.2017 / 23:34
0

Outra abordagem do awk :

ping -c1 www.google.com | awk -F'=' 'NR==2{ print strftime("[%T]",systime()),$NF; exit}'
[01:35:47] 41.5 ms
  • -F'=' - separador de campos personalizados

  • $NF - último valor do campo

  • exit - para interromper o processamento de entrada imediatamente no segundo registro

por 19.06.2017 / 00:36