0

我有一个类似于下面的 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这里扩展密钥。这个想法是log_group_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 或任何解析器/工具来做到这一点?任何帮助深表感谢。

4

1 回答 1

1

将 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_group_name:”不匹配的字符串,只需打印该行,否则,将变量 lognam 拆分为一个名为 arry 的数组,由“,”分隔,然后循环遍历该数组,打印以制表符和“-”为前缀的数组内容日志组名称:“

于 2020-07-07T17:11:23.690 回答