6

私はロガーから無限のデータストリームを出しており、それをgrepにパイプしています。grepの出力をファイルに保存したいのですが、各行の先頭にタイムスタンプ(行が表示された時刻)も含めたいと思います。これを達成する簡単な方法はありますか?ロガープロセスの出力を変更できないと仮定します。

4

1 に答える 1

12

およびを使用して静的タイムスタンプを追加できます。seddate

... | sed "s/^/$(date) /" >> output.txt

または、リアルタイムのタイムスタンプが必要な場合は、gawkstrftime関数を使用します。

... | 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)インストールtsmoreutilsから):

... | 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 に答える