假设我有一些json数据如下:
{"name":"alon","department":"abc","id":"ss12sd"}
{"name":"kate","department":"xyz","id":"ajsj3" }
{"name":"sam","department":"abc","id":"xx1d2"}
我想根据特定部门过滤数据并将其保存在不同的json文件中。从上面的数据假设我想过滤所有部门为'abc'的数据并将其保存在一些新的json文件中。我怎么能用jq做到这一点。我正在查看来自here的手册,但对此并不了解。
答案 0 :(得分:3)
jq 'map(select(.department == "abc")) ' yourfile.json
答案 1 :(得分:1)
灵活的模板可能是这样的:
jq --arg key department --arg value abc \
'.[] | select(.[$key] == $value)' input_file.json > output_file.json
通过这种方式,您可以在参数阶段而不是表达式中更改条件。
将其实现为shell脚本可能如下所示:
<强> myscript.sh 强>
#!/usr/bin/env bash
key="$1"
value="$2"
file="$3"
outfile="$4"
jq --arg key "$1" --arg value "$2" \
'.[] | select(.[$key] == $value)' "$3" > "$4"
你会这样调用:
./myscript.sh department abc input.json output.json
修改:将."\($key)"
更改为.[$key]
- 感谢@peak