シェルスクリプトの実行結果をファイルに保存する時など、タイムスタンプが欲しい時があります。いくつか方法はあると思いますが、ここではLinuxに標準でインストールされてるawk使って簡単に実現してみます。
$ ping 172.16.0.1 | awk '{print strftime("%F %T ") $0; fflush();}' 2017-07-02 21:34:29 PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data. 2017-07-02 21:34:29 64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=2.44 ms 2017-07-02 21:34:30 64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=2.01 ms 2017-07-02 21:34:31 64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=1.95 ms 2017-07-02 21:34:32 64 bytes from 172.16.0.1: icmp_seq=4 ttl=64 time=2.09 ms
簡単ですね。スクリプト内で毎回awkを呼び出すのは面倒な場合は、coproc コマンドやexecを組み合わせてみましょう。
#!/bin/bash TTY=`tty` coproc awk '{print strftime("%F %T ") $0; fflush();}' > $TTY exec >&${COPROC[1]} 2>&1 ping 172.16.0.1
coproc で awk コマンドをバックグラウンドで起動し、awkの標準出力を自分のttyにリダイレクトします。さらに、exec スクリプト内の全標準出力・標準エラー出力をcoprocで起動したawkの標準入力にリダイレクトしています。
結果、ping の出力結果が全てがawk経由で自分のターミナル上に出力されます。