How do I timestamp every ping result?
I could not redirect the Perl based solution to a file for some reason so I kept searching and found a bash
only way to do this:
ping www.google.fr | while read pong; do echo "$(date): $pong"; done
Wed Jun 26 13:09:23 CEST 2013: PING www.google.fr (173.194.40.56) 56(84) bytes of data.
Wed Jun 26 13:09:23 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=1 ttl=57 time=7.26 ms
Wed Jun 26 13:09:24 CEST 2013: 64 bytes from zrh04s05-in-f24.1e100.net (173.194.40.56): icmp_req=2 ttl=57 time=8.14 ms
The credit goes to https://askubuntu.com/a/137246
If your AWK doesn't have strftime()
:
ping host | perl -nle 'print scalar(localtime), " ", $_'
To redirect it to a file, use standard shell redirection and turn off output buffering:
ping host | perl -nle 'BEGIN {$|++} print scalar(localtime), " ", $_' > outputfile
If you want ISO8601 format for the timestamp:
ping host | perl -nle 'use Time::Piece; BEGIN {$|++} print localtime->datetime, " ", $_' > outputfile
From man ping
:
-D Print timestamp (unix time + microseconds as in gettimeofday) before each line.
It will produce something like this:
[1337577886.346622] 64 bytes from 4.2.2.2: icmp_req=1 ttl=243 time=47.1 ms
Then timestamp could be parsed out from the ping
response and converted to the required format with date
.