Adicionando entradas de array ao documento JSON existente a partir da entrada de texto simples

0

Eu tenho uma situação em que tenho a saída de um comando, como este,

192.168.1.84
192.168.1.85

Eu quero usar isso e fazer alterações em outro arquivo, ou seja, adicionar esses endereços IP um após o outro, como neste formulário. Abaixo da linha ResourceRecordSet .

ubuntu@kops:/mujahid$ cat change-resource-record-sets.json
{
    "Comment": "Update record to reflect new IP address of home router",
    "Changes": [
        {
            "Action": "UPSERT",
            "ResourceRecordSet": {
                "Name": "testing.mak.online.",
                "Type": "A",
                "TTL": 60,
                "ResourceRecords": [
                    {
                        "Value": "192.168.1.84"
                    },
                    {
                        "Value": "192.168.1.5"
                    }
                ]
            }
        }
    ]
}
    
por Mohd 10.04.2018 / 07:13

2 respostas

4

Para criar um JSON adequado na lista de endereços IP gerados por somecommand , use jq :

somecommand | jq -Rs '{
  Comment: "Update record to reflect new IP address of home router",
  Changes: [ {
      Action: "UPSERT",
      ResourceRecordSet: {
        Name: "testing.mak.online.",
        Type: "A",
        TTL: 60,
        ResourceRecords: split("\n")|.[0:-1]|map({Value:.})
     } } ] }'

Isso resulta em

{
  "Comment": "Update record to reflect new IP address of home router",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "testing.mak.online.",
        "Type": "A",
        "TTL": 60,
        "ResourceRecords": [
          {
            "Value": "192.168.1.84"
          },
          {
            "Value": "192.168.1.85"
          }
        ]
      }
    }
  ]
}

dado que somecommand outputs

192.168.1.84
192.168.1.85
    
por 10.04.2018 / 07:56
-2

Você pode armazenar sua entrada em uma matriz e produzir tudo com um loop sobre ela.

#!/bin/bash

OLDIFS=$IFS
IFS=' '
ARR=($@)
        for i in "${ARR[@]}"
        do
        echo $i >>/output/file.txt
done
IFS=$OLDIFS

Este script produzirá todas as entradas de linha por linha.

exemplo de chamada: thisscript.sh $(command that generates your IP's)

    
por 10.04.2018 / 07:52