我正在努力做什么
我有一个文件,其中有一个顶级父级,我想将其保留在文档的顶部,然后我还有许多其他父级,我想根据子键进行排序。我希望能够仅对那些后续父节点进行排序,并将特定父节点保留在它存在的文件中的任何位置。
我希望能够做什么
如果我们有 data1.yaml,例如:
---
Australia:
zoo:
animals:
- animal: kangaroos
population: 3
- animal: bears
population: 5
- animal: aardvark
population: 3
awsFunctionminimor:
- name: minimor
awsFunctionfabulous:
- name: fabulous
awsFunctiondancingpear:
- name: dancingp
我们运行一个命令:
yq '. |= sort_by(.) && ignorelines=[(1,16)]' data1.yaml
可以输出
---
Australia:
zoo:
animals:
- animal: aardvark
population: 3
- animal: bears
population: 5
- animal: kangaroos
population: 3
awsFunctiondancingpear:
- name: dancingp
awsFunctionfabulous:
- name: fabulous
awsFunctionminimor:
- name: minimor
我尝试过的
我尝试运行
yq '. |= sort_by(.)' data1.yml
,但它不起作用,因为节点不是数组。
更新上下文节点,如
. |= …
所示,是多余的;作为更新运算符的 RHS 提供的函数始终应用于当前上下文。此外,使用 sort_by(.)
并以上下文作为条件与仅使用 sort
相同。
您想要遍历要排序的数组(此处为
.Australia.zoo.animals
),然后使用 |=
并提供排序标准作为参数来更新 sort_by
。在这里,您似乎只想按 .animal
的本地值进行排序。要引入辅助标准(例如 .population
、length
等),只需将这些值作为流附加到标准参数(例如 sort_by(.animal, .population)
)即可。
这适用于 yq 的两种实现(使用 mikefarah/yq 版本 v4.34.1 和 kislyuk/yq 版本 2.12.0 进行测试),请指定您要针对哪一个。
.Australia.zoo.animals |= sort_by(.animal)
---
Australia:
zoo:
animals:
- animal: aardvark
population: 3
- animal: bears
population: 5
- animal: kangaroos
population: 3
awsFunctionminimor:
- name: minimor
awsFunctionfabulous:
- name: fabulous
awsFunctiondancingpear:
- name: dancingp