我有几个YAML文件,它们代表一个整体。我想将它们合并在声明整个字段的新字段(“来宾”)下。
file1.yml
name: johnny
age: 23
file2.yml
name: sally
age: 21
output.yml
guests:
- name: johnny
age: 23
- name: sally
age: 21
诸如yq
之类的工具使合并/覆盖变得容易,但是我找不到能帮助我将值嵌套在新字段下的工具。
答案 0 :(得分:0)
您要寻找的工具带有几个不同的名称,
被称为编程语言或脚本语言。我建议
您使用已安装ruamel.yaml
的Python。 (免责声明:我是《
该软件包)。
一旦拥有就可以做:
python -c "import sys, ruamel.yaml; yaml=ruamel.yaml.YAML(); yaml.indent(sequence=4, offset=2); yaml.dump(dict(guest=[yaml.load(open(f)) for f in sys.argv[1:]]), sys.stdout)" file*.yml > output.yml
获得所需的输出。
一些注意事项:
.yaml
extension,除非您的文件系统不支持。g
对齐。因此,yaml.indent()
调用。yaml.preserve_quotes = True;
try
except
子句回退到yaml.load_all()
进行处理的文档(最好放弃该文档) -liner表示支持多行Python程序。)您还可以使用yaml
命令行实用程序(可通过pip install ruamel.yaml.cmd>=0.5.0
安装)执行上述操作:
yaml from-dirs --sequence ./*.yml | yaml map --indent 2,4,2 guest - > output.yml
但这是一个两步过程(首先将多个yaml文件组合为根级别序列,然后将该序列推为要映射的值),因此速度是单线的两倍。