我有一个 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
,并为每种项目类型生成一个输出文件。
根据手册的 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)