JSONログファイルがありますtest.log
。
{"type":"1","fname":"AAA","lname":"bbb" }
{"type":"2","state":"gujarat" }
{"type":"3","city":"ahmedabad" }
{"type":"3","city":"rajkot" }
{"type":"1","fname":"ccc","lname":"ddd" }
次のコマンドを実行します。
cat test.log | jq -c "select(.type==\"1\")|{fname:.fname}" > type_1.txt
cat test.log | jq -c "select(.type==\"3\")|{city:.city}" > type_3.txt
単一のコマンドでjq
複数の出力ファイルを生成できますか?
ファイルに対してjq
コマンドを一度だけ実行しtest.log
、プロジェクトタイプごとに1つの出力ファイルを生成したいと思います。
ベストアンサー1
~によるとマニュアルのIO部分バージョン1.5以降、jqは標準出力にのみ書き込むことができ、デバッグメッセージをstderr
。
jqを何度も実行したくない場合test.log
(たとえば、大容量ファイルであるため)、次のようにすることができます。
jq -c '(select(.type=="1") | {fname:.fname}), (select(.type=="3") | {city:.city})' test.log > temp
# The file 'temp' contains one entry per line.
grep '^{"fname"' temp > type_1.txt
grep '^{"city"' temp > type_3.txt
rm temp