私はロガーから無限のデータストリームを出しており、それをgrepにパイプしています。grepの出力をファイルに保存したいのですが、各行の先頭にタイムスタンプ(行が表示された時刻)も含めたいと思います。これを達成する簡単な方法はありますか?ロガープロセスの出力を変更できないと仮定します。
質問する
6336 次
1 に答える
12
およびを使用して静的タイムスタンプを追加できます。sed
date
... | sed "s/^/$(date) /" >> output.txt
または、リアルタイムのタイムスタンプが必要な場合は、gawk
のstrftime関数を使用します。
... | gawk '{ print strftime(), $0 }'
お気に入りのフォーマットを定義できます。
... | gawk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }'
また、バッファリングが問題になる場合は、各行をフラッシュすることを忘れないでください。
... | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush() }'
または、次を使用しますunbuffer
。
unbuffer ... | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0 }'
がない場合はgawk
、他にいくつかのオプションがあります。
(a)インストールts
(moreutilsから):
... | ts '%F %T'
(b)使用perl
:
... | perl -pe 's/^/localtime . " "/e'
またはフォーマットあり:
... | perl -MPOSIX -pe 's/^/strftime("%Y-%m-%d %H:%M:%S", localtime) . " "/e'
ロケールに合わせてGMTをフォーマットする必要がある場合は、gmtime
代わりに使用できることを忘れないでください。localtime
(c)質問する。
于 2012-07-31T00:01:42.550 に答える