连接数组时合并两个 yaml 文档

2024-05-14

我想合并两个 yaml 文档,结果包含

  • 所有映射值(最后一个优先)
  • 串联数组

例如给定这个文件

# file1.yml
animals:
  - elephant
    donkey
flavours:
  sour:
    - lemon
  sweet:
    - chocolate
strange: true

和这个文件

#file2.yml
animals:
  - monkey
    pelican
flavours:
  sweet:
    - vanilla
strange: false

结果应包含所有节点,以及合并的数组和不是上一个文件中的数组的值

#result.yml
animals:
  - elephant
    donkey
    monkey
    pelican
flavours:
  sour:
    - lemon
  sweet:
    - chocolate
      vanilla
strange: false

yq 能做到吗?


将 YAML 文件与yq,连接数组。

假设

In both file1.yml and file2.yml, the animals数组包含带有多行字符串的单个索引。

elephant
donkey

for file1.yml, and

monkey
pelican

for file2.yml.

既然你问了串联数组,我假设file1.yml, file2.yml and results.yml应该是这样的:

# file1.yml
animals:
  - elephant
  - donkey
flavours:
  sour:
    - lemon
  sweet:
    - chocolate
strange: true

# file2.yml
animals:
  - monkey
  - pelican
flavours:
  sweet:
    - vanilla
strange: false

# result.yml
animals:
  - elephant
  - donkey
  - monkey
  - pelican
flavours:
  sour:
    - lemon
  sweet:
    - chocolate
    - vanilla
strange: false

Example

With yq4.x,您可以使用ireduce运算符合并两个或多个文件:

https://mikefarah.gitbook.io/yq/operators/reduce#merge-all-yaml-files-together https://mikefarah.gitbook.io/yq/operators/reduce#merge-all-yaml-files-together

$ yq4 eval-all '. as $item ireduce ({}; . * $item)' file1.yml file2.yml
animals:
  - monkey
  - pelican
flavours:
  sour:
    - lemon
  sweet:
    - vanilla
strange: false

两个文件已合并,但重复的键和数组已被最新文件覆盖。

要追加数组而不是覆盖它们,只需添加一个+在合并运算符之后(*).

https://mikefarah.gitbook.io/yq/operators/multiply-merge#merge-appending-arrays https://mikefarah.gitbook.io/yq/operators/multiply-merge#merge-appending-arrays

$ yq4 eval-all '. as $item ireduce ({}; . *+ $item)' file1.yml file2.yml
animals:
  - elephant
  - donkey
  - monkey
  - pelican
flavours:
  sour:
    - lemon
  sweet:
    - chocolate
    - vanilla
strange: false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接数组时合并两个 yaml 文档 的相关文章

随机推荐

  • YouTube 数据 api 未按 viewCount 排序

    我正在尝试按 viewCount 从高到低排序 YouTube 频道视频 但结果并不是按最大观看次数排序 以下是我正在使用的 API https www googleapis com youtube v3 search key api ke
  • Response.Buffer / Flush 似乎不起作用

    我有一个经典的 asp 页面 用户使用 Response Buffer True 和 Flush 在我的本地电脑上 这个页面运行得非常好 我已将该页面上传到我的网络服务器 但它不起作用 我唯一能够检查的是两台机器上 IIS 下的 ASP B
  • 如何使用express在node.js中使浏览器关闭后会话过期?

    我在用 req session cookie maxAge 14 24 3600 1000 0 让会话在两周后过期 但现在我想让它在浏览器关闭后过期 有什么办法可以做到吗 来自连接会话中间件文档 https github com expre
  • Google Apps 脚本:连接日期和时间

    更新 要使用 AppsScript 创建 Google 日历事件 我们可以使用以下简单方法createEvent eventName startTime endTime 我已经使用过这个并且没有任何问题 但我使用的唯一日期格式是谷歌表格中的
  • 显式与隐式 SQL 连接

    显式内连接与隐式内连接之间有效率差异吗 例如 SELECT FROM table a INNER JOIN table b ON a id b id vs SELECT a b FROM table a table b WHERE a id
  • 如何在 iOS 中设置视图的最大宽度?

    我的应用程序有一个基本的登录屏幕 一个外框以及其中的一些文本字段和按钮 我将框设置为填满屏幕 然而 在某些设备上这个盒子会太大 如何设置视图的最大宽度和高度 您可以使用自动布局约束 使框适应屏幕尺寸 但不超过给定的宽度和高度 为此 请对宽度
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • Android Camera.takePicture() 有时不返回?

    我正在编写一个Android 拍照应用程序 该代码在 onPreviewFrame byte data Cameracamera 中从预览中获取帧后进行一些处理 问题在于 android hardware Camera 的函数 takePi
  • 关于 C 中的 switch{} 情况?

    我正在读一些文字C language 文字说switch case只能接受整数类型 我只是好奇为什么switch case不接受其他类型 例如浮点数或字符串 这背后有什么原因吗 多谢 经典的原因可能是对于整数值的 决策表达式 可以进行非常好
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 在 UIView 中绘制彩色文本 -drawRect: 方法

    我正在尝试在我的中绘制彩色文本UIView子类 现在我正在使用单视图应用程序模板 用于测试 除了以下内容外 没有任何修改drawRect method 文本已绘制 但无论我将颜色设置为什么 它始终是黑色的 void drawRect CGR
  • Facebook Graph API 中不支持 get 请求

    由于某种原因我的https graph facebook com 210155825774263 https graph facebook com 210155825774263返回错误 error message Unsupported
  • AttributeError:'function'对象在pandas中没有属性'bar'

    我有一个 pandas 数据框 它是 pandas 数据框类型 如下所示 type df Out 176 pandas core frame DataFrame 但是 当我尝试在此数据框上使用任何绘图函数 如条形图 时 会出现如下错误 df
  • 无法解析类型“Microsoft.ApplicationInsights.TelemetryClient”的服务

    我已将我的 Web 项目从 RC1 迁移到 RC2 但出现以下错误 无法解析类型的服务 尝试时出现 Microsoft ApplicationInsights TelemetryClient 启用 Microsoft Application
  • OSX/Mac 中的插件持久设置

    我无法找到在 Mac 上存储 Office js 加载项的持久设置的方法 在 Windows 上 localStorage 工作得非常完美 因为它可以保存关闭和打开 Word 时仍保留的设置 在 Mac 上 localStorage 不会持
  • Cordova - 启动后出现白屏,控制台中没有例外

    我已经离开我的 Cordova 应用程序一段时间了 但昨天刚刚进行了一次新的克隆 发现它出现了 死机白屏 症状 启动画面显示 程序加载 然后我就得到一个空白屏幕 更多细节 CLI 科尔多瓦 6 1 1 安卓 5 1 1 ios 4 1 1
  • 为什么 { } 初始化需要 Add 方法?

    要使用这样的初始化语法 var contacts new ContactList Dan email protected cdn cgi l email protection Eric email protected cdn cgi l e
  • 将对象的值插入到span标签中

    我有一个对象 message text Here is some text 我想将它插入到一个跨度标签中 如下所示 span message text span 这不会打印 这是一些文本 而是只会在网页上显示 message text 我怎
  • 虚拟回调接口

    在 Eclipse 为您创建的来自 Google 的示例主从流代码中 片段中包含以下内容 private Callbacks mCallbacks sDummyCallbacks public interface Callbacks pub
  • 连接数组时合并两个 yaml 文档

    我想合并两个 yaml 文档 结果包含 所有映射值 最后一个优先 串联数组 例如给定这个文件 file1 yml animals elephant donkey flavours sour lemon sweet chocolate str