json - 使用 BASH 和 JQ 我想将 json 文件与 bash 数组进行比较

标签 json linux bash scripting jq

示例:

BASH 数组 FRUITS=(“苹果”“香蕉”“橙子”)

fruit.json

{
  "fruit": [
    "apple",
    "orange",
    "pomegranate",
    "apricot",
    "mango"
  ]
}

我需要做什么:

  1. 将 Bash 水果数组与 Fruit.json 文件进行比较,如果匹配所有元素则输出。
  2. 如果fruit.json 文件缺少 bash 数组中的水果元素,我必须显示它是哪一个。
  3. 如果 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/

相关文章:

java - jackson 未能反序列化 OneToMany 对象

linux - 如何从 *.ko 文件中获取默认内核模块名称?

linux - 重定向(>) h5dump 输出到文本文件导致数据丢失

java - "Cannot deserialize instance of"来自外部API

json - 如何从Json文件中使用Logstash获取TimeStamp? JSON中有多个日期字段

javascript - 为什么在reactjs中使用JSON.parse会导致跨源错误?

linux - Git 每日自动提交

linux - Sed 无法正常工作 - Shell 脚本

windows - 为什么 PS1 中的换行符会在 Git for Windows bash 中引发语法错误?

bash - 映射 id 的有效方法