2012-03-12 26 views
4

私のログファイルには、1行に1つのjsonオブジェクトがあります。私は[JSON] [1]tail -Fとjsonの組み合わせ

cat mylog.log | json -a field1 field2 

を経由して、人間が読める形式の出力を取得するために使用 は今、私は連続出力のため

tail -F mylog.log | json -a field1 field2 

を持っていると思います。しかし、これは の作業ではないようだが、シェルは単にハングアップする。 &|〜 をバッファリングの問題を避けるために使用すると、出力は のようになります。catのみを実行します。

{"field1": entry1a, "field2": entry2a, "field3": entry3a} 
{"field1": entry1b, "field2": entry2b, "field3": entry3b} 

任意の提案:

mylog.logは次のようになりますか?

[1] https://github.com/trentm/json

+0

'&|'?これはどのようなシェルですか? –

+0

'zsh'だと思っていますが、それは私が思ったことをしません。 – osdf

+0

https://bitbucket.org/bartswen/bsonify/ –

答えて

10

をそれはjsonfirst loads the whole stdin into a buffer and only then processes the dataのように見えますが、あなたはまだ、ログファイルに追加された線のそれぞれのためにそれを呼び出すことによって、このような何かをストリーム処理を実現することができるはずです。

tail -F mylog.log | while read line; do echo "$line" | json -a field1 field2; done 
+0

' echo "$ line" 'を見てみるといいかもしれません。 –

+0

@KarolyHorvath良い点。一定。 –

+1

私はエスケープされたバックスラッシュでいくつかのjsonを持っていました - class: "path \\ to \\ class"。これらを保持するために、私はread文を-r行に変更しなければなりませんでした。 – dastra

関連する問題