使用meld / xxdiff /或其他东西?
如果我有两个yaml文件,我怎么能自动合并它们?他们每个都有几百行。常见的部分是abc:
abc:
x:
0: null
y:
1: null
def:
x:
0: string
...
和
abc:
u: null
v: null
w: null
def:
u:
0: null
v: null
w: null
...
期望的结果:
abc:
x:
0: null
y:
1: null
u: null
v: null
w: null
def:
x:
0: string
u:
0: null
v: null
w: null
可以使用任何差异/合并工具吗?
编辑:在期望的结果中修复拼写错误
答案 0 :(得分:2)
如果不解析文件,我认为你不能做你想做的事。但是你可以用一个简短的python程序来实现:
import sys
import ruamel.yaml
data = None
for file_name in sys.argv[1:]:
d = ruamel.yaml.round_trip_load(open(file_name, 'rb'))
if data is None:
data = d
continue
for k in d:
data[k].update(d[k])
print(ruamel.yaml.round_trip_dump(data, indent=2, explicit_end=True))
这给出了(假设适当的输入文件:
abc:
x:
0:
y:
1:
u:
v:
w:
def:
x:
0: string
u:
0:
v:
w:
...
请注意,额外的空格会丢失为ruamel.yaml(披露:我是该软件包的作者),只有(部分)保留空白,如果与评论相邻。如果需要超过顶级键合并,您还需要使.update()
更智能,即递归。