Распечатайте результат ping в простом формате, таком как «10 мс»,

Всякий раз, когда я запускаю «ping -c 1 www.google.com», я получаю этот результат:

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 

Тем не менее, я хотел бы распечатать пинг в простом формате:

 [23:00:25] 25.8 ms 

Как я могу это достичь? До сих пор я пробовал

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

печатать пинг без времени, но, как вы, наверное, догадались, это не сработало.

Пытаться

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

Захватывает текущее время с помощью systime() и форматирует его в презентацию% T (hh: mm: ss), используя strftime . Затем печатает соответствующую часть поля 8, чтобы удалить time= ерунда.

пример

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

Другой подход awk :

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

  • -F'=' – настраиваемый разделитель полей

  • $NF – значение последнего поля

  • exit – прекратить обработку ввода сразу на 2-й записи