json - 在bash中使用awk合并两个Json文件

标签 json linux bash ubuntu awk

我尝试将两个 json 文件合并在一个文件中,但有一个条件,例如:如果文件 1 包含:testa:result>fail,文件 b 包含相同的行,但结果不同,例如:testa:result>pass,我希望文件 1 将使用文件 2 的结果进行更新,我使用 awk 命令有这一行,但它只合并没有此条件的文件:

awk 'BEGIN{print "{"} FNR > 1 && last_file == FILENAME {print line} FNR == 1 {line = ""} FNR==1 && FNR != NR {printf ","} FNR > 1 {line = $0} {last_file = FILENAME} END{print "}"}' json_files/* > json_files/all_merged.json

我需要这方面的帮助。

最佳答案

我建议使用python来完成任务。考虑这个例子:

import json
from pprint import pprint

fileName1 = "file1.json" # file1 contains something like { "Testname": "color", "result": "fail" }
fileName2 = "file2.json" # file2 contains something like { "AnotherTestname": "color2", "result": "pass" }
fileNameTo = "file3.json"

def visualize(data, prompt):
    print(prompt)
    pprint(data)
    raw_input("Press <Enter> to continue: ") # this line pauses the execution

def loadData(fname):
    with open(fname, "r") as f:
        return json.load(f)

jd1 = loadData(fileName1)
visualize(jd1, "Data from %s" % fileName1)
jd2 = loadData(fileName2)
visualize(jd2, "Data from %s" % fileName2)
jd3 = jd1.copy() # create a copy of data from file1, this step can be avoided if you don't need unmodified jd1
visualize(jd3, "Data after copying")
jd3.update(jd2) # merge copy of data from file1 with file2, updating corresponding keys
visualize(jd3, "Data after merging")
with open("file3.json", "w") as f3:
    json.dump(jd3, f3)

这个版本的脚本获得了一些“交互性”,它可以让您控制执行的每个步骤的数据状态。我刚刚检查过它按预期执行数据合并。请尝试根据您的测试数据运行它并查看输出。

关于json - 在bash中使用awk合并两个Json文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33139693/

相关文章:

linux - 如何包含相关脚本源文件bashrc

linux - 在 Ubuntu 中返回自定义进程命令

php - 如何使用 php 或 bash 读取文本文件并对其进行排序?

JAVA json架构2 POJO

jquery ui 自动完成 : remote source problem

linux - “JVM terminated. Exit code=13” 在 64 位 Linux 中使用 -vm 参数启动 Eclipse 时出错

c - 如何在C中制作一个fifo特殊文件?

javascript - 将 HTML 元素的 "Style"属性转换为 JSON

ios - 在IOS中解析嵌套的JSON代码

linux - 客户端 <unknown> 上的 MQTT 套接字错误