Yaml 解析传递给YML的变量

Yaml 解析传递给YML的变量,yaml,yq,Yaml,Yq,我有一个类似于下面的yml文件 functionbeat.provider.aws.functions: - name: cloudwatch enabled: true type: cloudwatch_logs description: "lambda function for cloudwatch logs" triggers: - log_group_name: "my-applicat

我有一个类似于下面的yml文件

functionbeat.provider.aws.functions:
    - name: cloudwatch
      enabled: true
      type: cloudwatch_logs
      description: "lambda function for cloudwatch logs"
      triggers:
        - log_group_name: "my-application-1"
我想在这里扩展
log\u group\u name
键。 例如,
log\u group\u name
键作为列表通过变量传入

logGroups=my-application-1、my-application-2、my-application-3、my-application-4

我希望这能在yml中转化为这一点

functionbeat.provider.aws.functions:
    - name: cloudwatch
      enabled: true
      type: cloudwatch_logs
      description: "lambda function for cloudwatch logs"
      triggers:
        - log_group_name: "my-application-1"
        - log_group_name: "my-application-2"
        - log_group_name: "my-application-3"
        - log_group_name: "my-application-4"

是否可以使用shellscript或任何解析器/工具执行此操作?非常感谢您的帮助。

使用bash和awk:

首先将原始yaml模板放入名为elastic的文件中:

functionbeat.provider.aws.functions:
   - name: cloudwatch
      enabled: true
      type: cloudwatch_logs
      description: "lambda function for cloudwatch logs"
      triggers:
        - log_group_name: "my-application-1"    
然后使用以下脚本:

#!/bin/bash
awk -v lognam=$1 '/log_group_name:/ { split(lognam,arry,",");for (i in arry) { printf "\t- log_group_name: \"%s\"\n",arry[i] } } !/log_group_name:/ { print $0 }' elastic

我们传入一个变量,例如“my-application-1,my-application-2”。然后,脚本将变量作为变量lognam传递给awk。对于所有不匹配“log\u group\u name:”模式的字符串,只需打印该行,否则,将变量lognam拆分为一个名为arry的数组,以“,”分隔,然后在数组中循环打印前缀为制表符和“-log\u group\u name:”的数组内容:

您可以使用第三方工具(如
yq
)进行此操作吗?是的,我可以使用
yq
@Inian。是否有办法使用yq实现此目的?@Inian只是一个示例。我可以删除它并让
yq
逻辑填充它。我在哪里可以看到它的输出?这是否会修改现有的
elastic
文件?否。您可以使用/scriptname>elastic1等工具重定向到另一个文件。但是,当我将其重定向回另一个文件时,格式会发生变化。
awk-v lognam=$1'/log\u group\u name:/{split(lognam,arry,“,”);for(I in arry){printf”\t\t\t\t-log\u group\u name:\%s\“\n”,arry[I]}/日志组名称:/{print$0}'elastic
似乎可以修复它。添加
\t
4次似乎可以解决这个问题。这是预期的吗?