【问题标题】:Bash Script to create a JSON file用于创建 JSON 文件的 Bash 脚本
【发布时间】:2016-04-05 15:55:58
【问题描述】:

输入: 我在下面的结构中有一个名为“myseedips”的文件名,其中包含一组 IP 地址

10.204.99.15
10.204.99.12
10.204.99.41

这些可以是一行一行的“n”个 IP 地址。

输出 我对 bash 编程一无所知。但是我必须编写一个 bash 脚本来在下面的结构中创建一个 JSON 文件。这些 IP 地址必须在一个循环中,以便 JSON 将根据 myseedips 文件的长度更改/扩展。

"cassandra": {
        "nodes": [
         {"ip_address": "10.204.99.15","type": "seed"},
         {"ip_address": "10.204.99.12","type": "seed"},
         {"ip_address": "10.204.99.41","type": "seed"}]
    },

还需要添加逻辑以在每个节点的末尾为除最后一个以外的所有节点添加逗号。如果只有一个节点,请不要附加逗号。

示例: 可能类似于下面的代码逻辑,但在 bash 编程中。

j string
j = `"cassandra": {"nodes": [`
for i =0;i<len(ips);i++ {
    j = j + `{"ip_address": "` + ips[i] + `","type": "seed"},`
}
j = j + `}]}`

谢谢 尼萨尔酋长

【问题讨论】:

    标签: arrays json bash jq


    【解决方案1】:

    关于 Jeff 的回答,请注意转换可以通过一次 jq 调用来完成。如果你的 jq 有 inputs 过滤器:

    jq -Rn '[inputs] | {cassandra:{nodes:map({ip_address:.,type:"seed"})}}' 
    

    否则:

    jq -Rs 'split("\n") | {cassandra:{nodes:map({ip_address:.,type:"seed"})}}' ips.txt
    

    【讨论】:

      【解决方案2】:

      使用jq,您需要一个额外的通道才能将原始文本转换为一个可行的数组,但很简单:

      $ jq -R '.' myseedips | jq -s '{cassandra:{nodes:map({ip_address:.,type:"seed"})}}'
      

      这会产生以下结果:

      {
        "cassandra": {
          "nodes": [
            {
              "ip_address": "10.204.99.15",
              "type": "seed"
            },
            {
              "ip_address": "10.204.99.12",
              "type": "seed"
            },
            {
              "ip_address": "10.204.99.41",
              "type": "seed"
            }
          ]
        }
      }
      

      【讨论】:

      • 杰夫,你还介意回答我在这个循环中发布的另一个问题
      【解决方案3】:

      awk 来救援!

      一个模板awk可以解决

      $ awk 'BEGIN{print "header"} 
           NR==FNR{c=NR;next} 
                  {print "prefix",$1,"suffix" (FNR<c?",":"]")}
               END{print "footer"}' myseedips{,}
      
      header
      prefix 10.204.99.15 suffix,
      prefix 10.204.99.12 suffix,
      prefix 10.204.99.41 suffix]
      footer
      

      您可以替换页眉、页脚、前缀和后缀。

      【讨论】:

        猜你喜欢
        • 2017-02-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-15
        • 2014-06-16
        • 2013-01-19
        • 2021-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多