일반 텍스트 입력에서 기존 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

스크립트는 입력한 모든 내용을 한 줄씩 출력합니다.

호출 예시:thisscript.sh $(command that generates your IP's)

관련 정보