У меня есть следующий файл yaml:
name: myapp
app1:
version: 1.2
replicas: 1
app2:
version: 2.3
replicas: 1
app3:
version: 4.0
app4:
version: 2.4
Я хотел бы использовать yq для увеличения значений каждого поля реплик, чтобы это привело к:
name: myapp
app1:
version: 1.2
replicas: 2
app2:
version: 2.3
replicas: 2
app3:
version: 4.0
app4:
version: 2.4
Любые идеи ?
Используйте select
с has
, чтобы проверить, существует ли поле, и +=
, чтобы обновить его:
Используя Майкфара/yq:
yq '(.[] | select(has("replicas")).replicas) += 1'
Используя кислюк/yq:
yq -y '(.[] | select(has("replicas")?).replicas) += 1'
@Luc .[]
получает доступ ко всем полям «сразу». Это как писать .app2
, что на самом деле означает .["app2"]
, но с неопределенным именем поля, то есть с любым именем.
Спасибо, действительно то, что мне было нужно. Из любопытства я не получил .[], так как я думал, что он как бы сглаживает все поля. Вместо этого он создает список каждого объекта?