单个“jq”命令写入不同的文件

vim*_*mal 7 json 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" }  
Run Code Online (Sandbox Code Playgroud)

我运行以下命令

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  
Run Code Online (Sandbox Code Playgroud)

单个命令是否可以jq生成多个输出文件?

我只想对文件运行该jq命令一次test.log,并为每种项目类型生成一个输出文件。

nwk*_*nwk 2

根据手册的 IO 部分,从版本 1.5 开始,jq 只能写入标准输出并将调试消息打印到stderr.

如果您不想test.log多次运行 jq (例如,因为它是一个巨大的文件),您可以做的是

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
Run Code Online (Sandbox Code Playgroud)