Linuxのpingコマンドの出力結果にタイムスタンプを付与する

Linuxでpingコマンドを打ち続けていると、どの時間帯では疎通が取れていたのに、この時間帯からは疎通が取れなくなった、というような情報が欲しい事がある。
だが、残念ながら現時点ではpingのオプションにタイムスタンプを追記するような機能は無い。。。というと嘘になって、「-D」というオプションがあるにはあるんだけど。。。UNIX時刻で表示するようなのだ。

[root@localhost ~]# ping -D 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1451860419.746687] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=5.20 ms
[1451860420.748230] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=5.36 ms
[1451860421.761398] 64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=16.9 ms
[1451860422.751211] 64 bytes from 8.8.8.8: icmp_seq=4 ttl=54 time=5.67 ms
[1451860423.755277] 64 bytes from 8.8.8.8: icmp_seq=5 ttl=54 time=7.93 ms
[1451860424.757697] 64 bytes from 8.8.8.8: icmp_seq=6 ttl=54 time=9.29 ms
[1451860425.755846] 64 bytes from 8.8.8.8: icmp_seq=7 ttl=54 time=6.05 ms
[1451860426.758742] 64 bytes from 8.8.8.8: icmp_seq=8 ttl=54 time=7.70 ms
[1451860427.763093] 64 bytes from 8.8.8.8: icmp_seq=9 ttl=54 time=10.2 ms
[1451860428.760407] 64 bytes from 8.8.8.8: icmp_seq=10 ttl=54 time=6.18 ms
[1451860429.761970] 64 bytes from 8.8.8.8: icmp_seq=11 ttl=54 time=6.42 ms
[1451860430.763397] 64 bytes from 8.8.8.8: icmp_seq=12 ttl=54 time=6.29 ms

では、どうやってタイムスタンプを付与するのかというと、もうこのオプションには頼らず、dateコマンドと組み合わせてwhileで実行させる。

ping 対象ホスト | while read pi; do echo "$(date '+[%Y/%m/%d %H:%M:%S]') $pi"; done

[root@localhost ~]# ping 8.8.8.8 | while read pi; do echo "$(date '+[%Y/%m/%d %H:%M:%S]') $pi"; done
[2016/01/04 07:37:33] PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[2016/01/04 07:37:33] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=6.44 ms
[2016/01/04 07:37:34] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=6.06 ms
[2016/01/04 07:37:35] 64 bytes from 8.8.8.8: icmp_seq=3 ttl=54 time=7.00 ms
[2016/01/04 07:37:36] 64 bytes from 8.8.8.8: icmp_seq=4 ttl=54 time=7.75 ms
[2016/01/04 07:37:37] 64 bytes from 8.8.8.8: icmp_seq=5 ttl=54 time=13.0 ms
[2016/01/04 07:37:38] 64 bytes from 8.8.8.8: icmp_seq=6 ttl=54 time=4.65 ms
[2016/01/04 07:37:39] 64 bytes from 8.8.8.8: icmp_seq=7 ttl=54 time=5.12 ms

xargsを用いる方法もある。

ping 8.8.8.8 | xargs -L 1 -I '{}' date '+[%Y/%m/%d %H:%M:%S] {}'

perlを用いる手法もあるようだ。

ping 8.8.8.8 | perl -MPOSIX -ne 'print strftime("%c ", localtime), $_'

とりあえず、いくつか方法はあるようなので、好きなので対応すると良いだろう。
そもそも、こんなことしなくても「-D」以外のオプションで人間の読める時間を出すようにしてもらえれば話は解決する気がするけど、まぁそのうち実装されるのだろう。