このxargsコマンドにはどのような問題がありますか?

このxargsコマンドにはどのような問題がありますか?

私は次の2つのバリエーションを試しています。

cat /var/log/zwave.log | xargs -n1 jq '.' 

&:

</var/log/zwave.log xargs -n1 jq '.' 

両方のコマンドが実行されているように見えますが、その行をファイルの場所として開こうとします。これは私がリストした2番目のコマンドには意味がありますが、パイプを使用する最初のコマンドでは、各行がパイプで接続されているかのzwave.logように動作する必要はありませんかjq '.'


私が作業しているが生成を制御できないロギングシステムは、ログファイルの各行にjsonオブジェクトを生成します。

{ "name": "PeriodicWork", "hostname": "myHost", "pid": 12189.20, "level": 20, "msg": "Executing [CheckFailedTask NodeId=8]", "time": "2017-12-04T00:20:30.953Z", "v": 0 }

ただし、ロガーは時々失敗し、このような結果を生成しますUnable to start service: [TimeoutError: operation timed out]

そのため、jqファイルにのみ使用できません。

ベストアンサー1

xargsを使用しないでください。

jq '.' /var/log/zwave.log

json行だけをフィルタリングする必要がある場合は、前にgrepを使用できます。

grep -E "^{" test.txt | jq '.' 

Xargs は、入力の各単語を与えられたコマンドに引数として追加するために使用され、デフォルトでは-n 1以下を実行するのと同じです。

jq '.' "$word1"
jq '.' "$word2"
jq '.' "$word3"

これがあなたが見るものです。ファイルにコマンドに渡す他のファイルまたは引数のリストが含まれている場合は、xargsを使用する必要があります。


xargs¹はスペースで区切られた単語(ロケールと実装によっては少なくともスペース、タブ、改行、YMMV xargs)を表しますxargsが、最新のシェルまたはJSONファイル形式と同じ方法ではありませんが、一部の形式の引用も理解しています。

おすすめ記事