プレーンテキスト入力で既存のJSONドキュメントに配列項目を追加する

プレーンテキスト入力で既存のJSONドキュメントに配列項目を追加する

以下のようにコマンドが出力される状況が発生しました。

192.168.1.84
192.168.1.85

これを使用して他のファイルを変更したいと思います。つまり、このフォームのようにこのIPアドレスを順番に追加したいのです。次のようなリソースレコードセットワイヤー。

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"
                    }
                ]
            }
        }
    ]
}

答え1

生成されたIPアドレスのリストから正しいJSONを生成するには、somecommand次のようにします。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:.})
     } } ] }'

これにより

{
  "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"
          }
        ]
      }
    }
  ]
}

somecommand出力が与えられると

192.168.1.84
192.168.1.85

答え2

入力を配列に保存し、ループを介してすべてを出力できます。

#!/bin/bash

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

スクリプトは、入力したすべての内容を1行ずつ出力します。

呼び出しの例:thisscript.sh $(command that generates your IP's)

関連情報