首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

比较两个JSON文件,并在Shell脚本中使用Jq从文件中输出不匹配的值

在Shell脚本中,可以使用Jq工具来比较两个JSON文件并输出不匹配的值。Jq是一个轻量级的命令行JSON处理工具,它可以用于解析、查询和转换JSON数据。

以下是一个示例的Shell脚本,用于比较两个JSON文件并输出不匹配的值:

代码语言:txt
复制
#!/bin/bash

# 比较两个JSON文件的函数
compare_json_files() {
    file1="$1"
    file2="$2"

    # 使用Jq解析JSON文件并获取所有键的列表
    keys1=$(jq -r 'keys[]' "$file1")
    keys2=$(jq -r 'keys[]' "$file2")

    # 比较两个JSON文件的键列表
    diff_keys=$(diff <(echo "$keys1") <(echo "$keys2") | grep "<" | awk '{print $2}')

    # 遍历不匹配的键列表,并输出对应的值
    for key in $diff_keys; do
        value1=$(jq -r ".$key" "$file1")
        value2=$(jq -r ".$key" "$file2")
        echo "Key: $key"
        echo "Value in file1: $value1"
        echo "Value in file2: $value2"
        echo "------------------------"
    done
}

# 调用函数比较两个JSON文件
compare_json_files "file1.json" "file2.json"

在上述示例中,我们定义了一个名为compare_json_files的函数,该函数接受两个参数,即要比较的两个JSON文件的路径。函数首先使用Jq工具解析JSON文件,并获取两个文件的键列表。然后,使用diff命令比较两个键列表,找出不匹配的键。最后,遍历不匹配的键列表,并使用Jq工具获取对应的值,并输出到标准输出。

请注意,上述示例中使用的是Jq工具来解析JSON文件和提取值。如果系统中没有安装Jq工具,可以通过以下命令来安装:

代码语言:txt
复制
# Ubuntu/Debian
sudo apt-get install jq

# CentOS/RHEL
sudo yum install jq

# macOS
brew install jq

希望这个答案能够满足你的需求。如果你有任何其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JSON神器之jq使用指南指北

jq 输入被解析为一系列以空格分隔 JSON ,一次一个地通过提供过滤器。过滤器输出被写入标准输出,同样是一系列以空格分隔 JSON 数据。 注意:注意 shell 引用规则很重要。...使用此选项将通过将每个 JSON 对象放在一行来生成更紧凑输出。 --tab: 每个缩进级别使用一个制表符,而不是两个空格。...编译失败测试仅包含“%%FAIL”行开始,然后是包含要编译程序行,然后是包含要与实际进行比较错误消息行。 请注意,此选项可能会向后兼容地更改。 基本过滤器 占位符:....如果它未命名) 捕获匹配任何内容组会返回 -1 偏移量 capture(val),capture(regex; flags) 在 JSON 对象收集命名捕获,每个捕获名称作为键,匹配字符串作为对应...(回想一下,jq 程序输出总是作为 JSON 文本输出到stdout.)debug内置可以具有特定于应用程序行为,例如对于使用 libjq C API 但不是 jq 可执行文件本身可执行文件

28.5K30
  • 使用 shell 脚本自动获取发版指标数据

    解决方案 凡是重复性劳动都有优化空间,凡是收集数据工作都能用脚本完成——本着这两个原则,尝试做一个自动获取发版指标数据 shell 脚本。...: 主要使用是 http post 数据,数据基于 json 格式返回: 不同请求返回 json 格式不同,不过都可以使用 jq 命令处理。...是外部传入,这个参数其实就是浏览器存储到文件后传递进来 curl 响应存放在 temp.gzip 文件使用 gunzip 解压缩到 temp.txt 文件,后面就可以用 txt 进行数据解析了...使用jq 内置管道,在数组挑选要提取元素下标,关于 jq 语法可参考文末链接。...说一下工具与效率问题,在比较强调流程公司干活,不断在工作积累一些工具、脚本是非常必要,不然随着工作量加码,个人精力会被消耗在日常重复工作,导致效率降低。

    99120

    数据库同步 Elasticsearch 后数据不一致,怎么办?

    可以使用 Python、Shell 脚本或其他编程语言编写一个简单脚本来执行此操作。...2.2 比较脚本实现 以下是一个简单 Shell 脚本示例,用于比较 Logstash 输出文件JSON 格式)和 PostgreSQL 数据库数据。.../bin/bash # 将 JSON 文件 ID 提取到一个文件 jq '.id' /path/to/logstash_output.log > logstash_ids.txt # 删除 JSON...如果发现缺失 ID,它们将被保存在 missing_ids.txt 文件,并输出到控制台。请注意,该脚本假设已经安装了 jq(一个命令行 JSON 处理器)。如果没有,请先安装 jq。...使用 Redis 优点是它能在内存快速处理大量数据,而不需要在磁盘上读取和写入临时文件。 4、小结 方案一:使用 Shell 脚本和 grep 命令 优点: (1)简单,易于实现。

    49110

    文件查看分割命令

    -c 单行输出json字符串; -n 使用“null”作为单个输入; -e 设置输出时候退出状态码; -s read (slurp) all inputs into an...key,注意这里由于和shell{}冲突所以用() [root@192 ~]# jq 'has(2)' json.txt false [root@192 ~]# jq 'has(1)' json.txt...diff 命令 描述:比较给定两个文件不同之处,并以所在行形式进行显示;默认是以逐行方式进行比较文本文件异同处,比较两个文件内容 (源文件 和 目标文件),如果使用“-”代替“文件”参数,...,n4 #示例2.比较两个文件夹不同和和递归比较 diff -r myweb/ html WeiyiGeek.示例2 #示例3.将补定文件进行输入到新文件 #效果来看事是将两个文件不同之处都输出...comm 命令 描述:可以用于两个文件之间比较( 逐行比较两个已排序文件),它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。 交集:打印出两个文件所共有的行。

    3.9K20

    使用 shell 脚本自动申请进京证 (六环外) —— debug 过程

    问题现象 用 shell 脚本写了一个自动办理六环外进京证工具 《使用 shell 脚本自动申请进京证 (六环外)》,然而运行这个脚本总是返回以下错误信息: { "msg": "目前办理业务人数较多...Charles 可以抓 App 报文,如果也能抓脚本报文,两个一对比问题就水落石出啦~ 经过一番百度,发现要让 Charles 抓命令行报文还比较麻烦,需要配置两个环境变量: export http_proxy...另外有两个小点需要注意: 不要下载 jq模块 (submodule),否则 autoreconf 需要更高版本,在我环境中会报错退出。...所以问题根因就清楚了,是错误shell 字符串长度做为了数据长度,当数据内容包含汉字时,它俩是一致,这也是为什么 stateList 可以请求成功原因;而当数据包含 utf-8 汉字后...-> 去除 shell 数组初始化 -> 去除 date +1 -> 升级 curl -> 对比 pc 和 android 上 curl -v 输出,最终定位到了问题根因:使用 shell 字符串长度作为数据长度

    2.1K90

    15 分钟掌握 15 个 Docker 小窍门

    这样,就无需再输入冗长docker ps -l -q命令了。通过两个斜引号“,可以获取dl命令,也就是最近运行容器id。...2.尽量在Dockerfile中指定要安装软件,而不用Docker容器shell直接安装软件 说实话,我有时候也喜欢在shell安装软件,也许你也一样,喜欢在shell把所有软件安装都搞定。...5. docker inspect输出结果解析利器:jq 要对docker inspect输出结果进行过滤,一般情况下,用grep命令,你需要这样操作: $docker inspect `dl` |...7.RUN命令 vs CMD命令 Docker新手用户比较容易混淆RUN和CMD这两个命令。 RUN命令在构建(Build)Docker时执行,这时CMD命令执行。...RUN命令会影响文件系统。因此,不要再Dockerfile中用启动后台程序,要把后台程序启动成前台进程。或者,像一些高手提议那样,写一个启动脚本,在脚本启动这些后台程序或进程。

    1.8K50

    根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID

    下面是作者写两个小工具,可以帮助运维同胞们快速定位问题。 根据 Pid 获取 K8s Pod 名称 脚本工具 $ vim pod_name_info.sh #!...io.kubernetes.pod.name"' } pid=$1 Check_jq Pod_name_info 上面 Shell 脚本需要服务器上安装 jq 命令,因为脚本依赖 jq 来处理 json...作为系统管理员,在日常工作无论是编辑配置文件或者通过 http 请求查询信息,我们都不可避免要处理 JSON 格式数据。 jq 是一款命令行下处理 JSON 数据工具。...其可以接受标准输入,命令管道或者文件 JSON 数据,经过一系列过滤器(filters)和表达式转后形成我们需要数据结构并将结果输出到标准输出。...jq 这种特性使我们可以很容易地在 Shell 脚本调用它。 演示 运行方式 # 通过 Pid 获取 Pod 名称 $ ./pod_name_info.sh Pid 下面展示输出结果 ?

    3.4K50

    介绍一个不太小工具:Shell Operator

    Shell Operator 是个冷僻又有点用东西。这个工具角度比较刁钻——使用特定事件来触发 Shell 脚本。...这个工具使用方式也很有趣,要定义某个任务: 编写任务脚本 使用基础镜像,加入任务脚本,打包生成一个 Docker 镜像并推送 把镜像部署到集群之中 对应事件出现时,将执行该任务脚本。...,如果使用 --config 参数启动,则会输出一个 YAML 格式配置文件,其中表明该脚本会在 Kubernetes 中加入新 Pod 时候触发。...,在 Hook 被触发时,会把触发时上下文内容以 JSON 形式保存到一个文件文件名会保存到 $BINDING_CONTEXT_PATH。...这里会用 jq 文件 JSON 获取 Pod 名称,并展示出来。

    73210

    shell写ssh快速链接工具-2.0

    shell写ssh快速链接工具-2.0 先看一下效果 选择分组: ? 选择服务器 : ? 开始链接: ? 为什么写 之前写过一个字符界面的链接工具,但是看起来比较简陋,他是这个样子: ?...有这两个框框,就已经可以满足我需求啦,现在就可以写了 写ssh配置文件 之前写配置文件看起来不是很清晰,添加起来比较容易出错,现在我使用json格式文件来保存多个ssh配置,它看起来是这样:...现在配置文件写完了,我们看一下怎么在shell里解析jsonshell脚本解析json 这里我是用用 jq 这个工具来做,当然这个jq 不是 jquery。...我用上面写ssh配置举例: 1:取出数组第一个元素 jq .[0] ssh.json 结果: { "name": "何白白", "server": [ { "name":...1:首先我们需要将json数组每个对象name属性找出来 这样写: for i in $(seq `jq length $config_file`) do index=`expr $i -

    2.1K30

    如何优雅使用Docker?请收下这15个小技巧。

    这样,就无需再输入冗长docker ps -l -q命令了。通过两个斜引号“,可以获取dl命令,也就是最近运行容器id。...说实话,我有时候也喜欢在shell安装软件,也许你也一样,喜欢在shell把所有软件安装都搞定。但是,搞来搞去,最后还是发现,你还是需要在Doockerfile中指定安装文件。...Tip5 docker inspect输出结果解析利器:jq 要对docker inspect输出结果进行过滤,一般情况下,用grep命令,你需要这样操作: $docker inspect `dl`...Tip7 RUN命令 vs CMD命令 Docker新手用户比较容易混淆RUN和CMD这两个命令。 RUN命令在构建(Build)Docker时执行,这时CMD命令执行。...RUN命令会影响文件系统。因此,不要再Dockerfile中用启动后台程序,要把后台程序启动成前台进程。或者,像一些高手提议那样,写一个启动脚 本,在脚本启动这些后台程序或进程。

    1.1K30

    挖掘SRC时如何编写信息收集脚本

    tew -x nmap.xml -dnsx dns.json —vhost | httpx -json -o http.json DNSx输出主机名已自动解析为Nmap XML输出文件IP地址和开放端口...在上图当中,信息收集脚本出于可读性目的,不会输出JSON,但是,信息收集脚本一旦需要将HTTPx输出保存为JSON格式,就需要使用下面的jq oneliner提取 HTTP URL。...6.HTTP爬虫 信息收集脚本下一部分将抓取发现URL。信息收集脚本可以稍后使用ffuf处理这些以匹配正则表达式,并使用Gospider进行爬取。...gospider -S http.txt —json | grep "{" | jq -r '.output' 7.HTTP抓包 信息收集脚本受Tomnomnom启发,HTTP索引页捕获HTTP响应可以作为挖掘...| tee "$scan_path/crawl.txt" 8.Javascript分析 在学习编写信息收集脚本过程,通过学习使用HTTPx将响应存储到文件,举一反三戛,信息收集脚本也可以应用同样原理来快速存储

    20010

    使用 shell 脚本自动申请进京证 (六环外)

    在后面的 jq 脚本 (通过 -c 指定),就可以直接使用sfzmhm 来引用这个变量啦,注意使用前缀才是 jq 变量,否则就是字面值,表示 json 字段名。...jq 会报错 内置变量 vs shell 变量 有的读者比较细心,可能会问了,“内置管道线”第二个例子不是可以直接在 jq使用 shell 变量吗,那能否在构造请求时也直接使用 shell 变量...可以看到,因为要包含 shell 变量,整个 json 字符串需要被双引号包围,而其中大量 json 字段名本身就有双引号,不得不使用反斜杠进行转义, 这样一来手工修改工作会特别多,可读性也比较差。...,第一种使用 shell 变量,直接将双引号放入生成 json 中了,导致引号匹配出错;后一种使用 jq 内置变量,会将 data 内部双引号自动转义,从而符合 json 语法。...总结一下,使用 jq 变量和 json 模板构造请求将使生成 json 字符串符合语法、脚本变得清晰、数据也便于维护,推荐指数五颗星。

    3.2K20

    使用 Shell Operator + CRD 恢复被暂停 Argo Workflow

    Shell Operator 简介 简单来说,Shell Operator 是一个让用户能够使用脚本语言快速建立 Operator 框架,能够非常方便完成定时运行、启动运行、监听并响应 Kubernetes...这篇文章会使用这一框架, CR 资源获取用户恢复运行指定步骤意图,并完成恢复运行操作。...脚本 符合触发条件 CR 一旦创建,就会被 Shell Operator 捕获,并保存到对应 Pod 文件系统,临时文件名保存在环境变量 BINDING_CONTEXT_PATH 里。...这里我们使用 Shell 脚本,处理环临时文件内容,查找 CR 包含流程实例和模板名称。查找到流程实例之后,在其 status 节点查找 Pod 名称,最后执行恢复操作。脚本内容如下: #!...调试 Shell Operator 在工作过程难免会出现问题,我主要依赖三板斧: 使用 kubectl logs 查看 Pod 日志。

    11310

    Shell脚本备忘录

    name为name2,city为city2 2. $ 2.1 引用变量用法 2.2 引用脚本或函数参数 2.3 上条命令返回 2.4 执行并获取命令输出 2.5 获取当前进程 ID 2.6 获取后台运行最后一个进程...=赋值时候,两边不能出空格,不然会被认为是命令 1. jq jq可以对json数据进行分片、过滤、映射和转换,和sed、awk、grep等命令一样 1.1 安装 yum -y install jq 1.2...几个常用例子 以这个json结构为例子进行解析,假设文件命名为:json.txt [{ "name": "站长工具", "url": "http://tool.chinaz.com",...cat json.txt | jq '.[0]' 1.2.2 取出数组index=0name内容 cat json.txt | jq '.[0].name' 1.2.3 以key-value格式取出数组...:后台运行最后一个进程 ID 号 $- :显示 Shell 使用的当前选项 $(命令) :执行并获取命令输出 2.1 引用变量用法 2.2 引用脚本或函数参数 2.3 上条命令返回 使用 $?

    85710

    使用Unix工具解析JSON

    比如jq: curl -s 'https://api.github.com/users/lambda' | jq -r '.name' 你也可以使用已经安装在你系统上工具,比如使用Pythonjson...这使得在可移植shell脚本中表示解析JSON结果有些棘手。有一些比较巧妙方法可以做到这一点,但如果键或包含某些特殊字符,许多方法可能会失效。...最后,用shell编写一个功能齐全JSON解析器将形成一个相当大依赖项,你不如直接使用现有的依赖项,如jq或Python。...一个足够健壮、能处理所有JSON输入而崩溃解决方案也会相对较大且复杂,因此与添加对jq或Python额外依赖相比,区别并不会太大。...我曾经不得不处理由于shell脚本不良输入解析而导致大量客户数据被删除情况,所以我从不推荐可能在这种方式上脆弱快速和粗鲁方法。我强烈推荐只使用经过测试现有JSON解析器。

    6910
    领券