単一の「jq」コマンドが別のファイルに書き込まれます。

単一の「jq」コマンドが別のファイルに書き込まれます。

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

おすすめ記事