基本的にping統計をファイルに書きたいと思います。これまではこれをしましたが、以前のping adress | awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0}' > textfile
プロセスを中断せずに出力を見ることができれば、より便利です。私はまた、このコマンドが私のテキストファイルにstderrを書き込まないことを知っています。この質問を書いてこの部分が思い出されました。
コマンドまたはスクリプトは、基本的に次のように動作する必要があります。
$ command > textfile [15.08.2017 00:17:07] PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. [15.08.2017 00:17:07] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=11.5 ms [15.08.2017 00:17:08] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=11.5 ms ^C $ cat textfile [15.08.2017 00:17:07] PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. [15.08.2017 00:17:07] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=11.5 ms [15.08.2017 00:17:08] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=11.5 ms
答え1
コマンドを次に変更します。
ping address 2>&1 | awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0}' | tee textfile
2>&1
stderrをstdoutにリダイレクトして、画面と指定されたファイルの両方に出力できるようにしますawk
。tee
awk
出力をバッファリングすると、迷惑になることがあります(チャンクで示されています)。次に、次を使用します。
awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0; fflush()}'
または:
stdbuf -oL awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0}'