LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   Rolling display of ping (https://www.linuxquestions.org/questions/programming-9/rolling-display-of-ping-747022/)

grob115 08-12-2009 10:57 AM

Rolling display of ping
 
Hello,

I need to display the most recent 5 pings each second continuously, as in the following example:
1st second Ping 1 - 5
2nd second Ping 2 - 6
3rd second Ping 3 - 7
.... and so on

I've written the following script to:
1) ping continuously to a specific address
2) format the output

I believe I need to make use of the Hold Buffer functionality of "sed" to buffer the latest 5 ping samples (FIFO - push the oldest sample out when a new sample is pushed in), and the print out the buffer. However, I'm not sure how to do this. Any ideas? Thanks.

#!/bin/sh
ping -s 172.16.114.210 | sed '
/icmp_seq=0/ {
s/ from /,/
s/: icmp.*time=/,/
s/PING.*data bytes//
}
/icmp_seq=0/ !{
s/ from /,/
s/: icmp.*time=/,/
s/PING.*data bytes//
}'

JulianTosh 08-14-2009 09:21 AM

How's this?

Code:

#! /bin/bash
PINGS="1 2 3 4 5"

echo "$PINGS"
while [ 1 ]
do
  PING=$(ping -c 1 localhost | grep "icmp_seq" | sed "s/.*time=//;" | cut -f1 -d" " | tr "\n" " ")
  PING="${PING%%\ }"
  PINGS="${PINGS#* } $PING"
  echo "$PINGS"
done


grob115 08-15-2009 01:57 AM

Hello,

Thanks. Just tried it but it gave the following, and kept adding a new line until I press Ctrl C.
./ping_CASE_STBY.sh
1 2 3 4 5
2 3 4 5
3 4 5
4 5
5

I think "ping -c 1 localhost" is just to ping local host once. But this command doesn't quite work on my UNIX because no matter what number I specified, it only ping once. In addition, it only states it's alive without the latency info.
bash-3.00$ ping -c 1 localhost
localhost is alive
bash-3.00$ ping -c 2 localhost
localhost is alive
bash-3.00$


Not quite sure what the rest of the lines are for. Can you explain the following:
PING="${PING%%\ }"
PINGS="${PINGS#* } $PING"

JulianTosh 08-15-2009 02:16 AM

Code:

PING="${PING%%\ }"
This removes an extra space from the ping time. i.e. changes "0.043 " to "0.043"

Code:

PINGS="${PINGS#* } $PING"
This removes the first column and appends the last ping time to the end. You can read about string searching and expansion here:
http://www.tldp.org/LDP/abs/html/str...ipulation.html

JulianTosh 08-15-2009 02:19 AM

BTW, this is the output from my ping command:
Code:

$ ping -c 1 localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=0 ttl=64 time=0.128 ms

--- localhost.localdomain ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.128/0.128/0.128/0.000 ms, pipe 2

The grep just isolates the ping response and the rest of the sed stuff isolates the actual ping time, which is then stored in PING.


All times are GMT -5. The time now is 06:18 AM.