【问题标题】:Looping through matched values in awk遍历 awk 中的匹配值
【发布时间】:2020-09-25 15:19:52
【问题描述】:

我正在尝试使用 bash 解析输入文件并将值从 'variable' 提取到 '}' ,但是我不确定如何遍历每个匹配的值并生成预期的输出。任何帮助表示赞赏。

test.sh:

 #!/usr/bin/env bash
        
 file="./test.tf"
 output="$(awk '/variable/,/}/'  $file)"
 echo "$output

test.tf:

 variable "policy_name1" {
      description = "abc xyz"
      type        = string
      default = [
        test1,
        test2,
      ]
    }
    
    variable "policy_name2" {
      description = "aaa xyz"
      type        = bool
      default     = false
    }

预期输出:

"policyname1","abc xyz","test1,test2"
"policy_name2","aaa xyz","false"

【问题讨论】:

  • ./test.tf 添加到您的问题中。
  • 为什么文件看起来像损坏的 JSON?
  • 这是 terraform。
  • 使用 terraform 特定软件解析/修改 terraform 格式并制作 text/json/csv 等不是更好吗?
  • 上述示例文件不是正确的 terraform 输入。 “policy_name1”(字符串)的类型与默认值(列表(字符串))不一致。

标签: bash awk sed terraform


【解决方案1】:

Terraform 输入文件遵循 HCL 配置语言形式(参见 https://github.com/hashicorp/hcl/blob/hcl2/hclsyntax/spec.md)。

该语言支持块、条件等。使用面向行的 awk 脚本无法正确解析这些文件。通过使用“terraform show -json”输出,您可能会获得更多里程。或者,尝试使用export TF_LOG=trace 设置环境变量TF_LOG,并查看输出

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多