如何使用yq对数组进行随机排序(洗牌)?
使用yq实现数组随机排序(洗牌)的可行方案
问题场景
已知yq可通过官方方法对数组排序,但需要实现数组随机洗牌。示例数组如下:
- a: banana - a: cat - a: apple
尝试执行yq 'sort_by(RANDOM)' sample.yml未成功,已查阅官方相关示例,求可行解决办法。
解决方案
针对yq v4+版本,有两种可行方式:
方式一:用sort_by结合随机函数
你之前用的RANDOM是shell环境变量,yq自身的随机函数是rand——它会生成0到1之间的随机浮点数,以此作为排序依据就能实现随机洗牌:
yq 'sort_by(rand)' sample.yml
方式二:通过索引打乱重排
先生成数组索引的范围,打乱索引顺序后再按新索引提取原数组元素,也能达到洗牌效果:
yq 'range(length) | shuffle | map(.[.])' sample.yml
内容的提问来源于stack exchange,提问作者joannava
相关产品推荐
相关产品推荐

