示例:
BASH 数组 FRUITS=(“苹果”“香蕉”“橙子”)
fruit.json
{
"fruit": [
"apple",
"orange",
"pomegranate",
"apricot",
"mango"
]
}
我需要做什么:
- 将 Bash 水果数组与 Fruit.json 文件进行比较,如果匹配所有元素则输出。
- 如果fruit.json 文件缺少 bash 数组中的水果元素,我必须显示它是哪一个。
- 如果 Fruit.json 文件包含 bash 数组中没有的任何额外水果元素,我必须将其输出。
我设法解决了前两项任务,但第三项任务遇到了麻烦。关于如何使用 bash 和 jq 实现第三个目标有什么想法吗?
最佳答案
使用comm
比较两个列表。
comm \
<(jq < fruit.json -r '.fruit | sort | .[] | ascii_upcase ') \
<(printf "%s\n" "${FRUITS[@]}" | sort)
将输出一个三列列表:仅在fruit.json
中的元素、仅在FRUITS
中的元素以及常见元素。要抑制某列,请使用适当的 comm
选项:-23
将抑制第二列和第三列,只提供 fruit.json
-仅限元素。同样,-13
将仅提供 FRUITS
元素。
关于json - 使用 BASH 和 JQ 我想将 json 文件与 bash 数组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73131291/