如何使用yq统计多文档YAML文件中的有效文档数量?
用yq统计多文档YAML的文档数量
先明确你的YAML文档数量
你的YAML文件实际包含3个文档,不是你认为的2个:
--- one: hey # 第一个文档 --- two: you # 第二个文档 --- # 第三个空文档(只要出现`---`就代表新文档开始,哪怕后面无内容)
YAML规范里,---是文档起始分隔符,只要出现就标记一个新文档的启动,即使后面没有内容,也是有效的空文档。
正确的yq统计命令
针对当前主流的mikefarah/yq v4+版本,用以下命令可直接得到文档总数:
方法1:利用eval-all的数组特性
yq ea 'length' your_file.yaml
ea(eval-all)模式会把所有YAML文档合并成一个数组,length直接返回数组长度,也就是文档数量,执行后输出3。
方法2:用ireduce累加计数
yq ea 'ireduce(0; . + 1)' your_file.yaml
ireduce会遍历所有文档,从初始值0开始,每处理一个文档就加1,最终输出总计数3。
你之前的命令问题解释
执行
yq ea '. as $item ireduce (0; . + 1)'得到三个3:
这个写法逻辑有误,在ea模式下,你先把当前文档赋值给$item再执行ireduce,相当于对每个文档都重新遍历所有文档做一次累加,所以每个文档都会输出最终累加结果3,总共输出三次。执行
yq e '. as $item ireduce (0; . + 1)'得到三个1:e(eval)模式是逐个处理单个文档,ireduce在这里只对当前单个文档做累加,每个文档单独计数都是1,所以三个文档输出三次1。
内容的提问来源于stack exchange,提问作者Matthew Adams
相关产品推荐
相关产品推荐

