我正在嘗試動態生成 JSON,但是,我遵循的方法最后},使 JSON 無效:
#Initializing Current State file
echo "[" > state.json
# Getting list of all EKS clusters
for cluster in $(aws eks list-clusters --output text | awk '{print $2}')
do
echo "====== $cluster ======"
# Get list of all ASG from cluster
for asg in $(aws autoscaling describe-auto-scaling-groups --query 'AutoScalingGroups[?contains(Tags[?Key==`eks:cluster-name`].Value, `'"$cluster"'`)].[AutoScalingGroupName]' --output text)
do
echo "Getting capacity for ASG: $asg"
MinSize=$(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name $asg --query 'AutoScalingGroups[*].MinSize' --output text)
DesiredCapacity=$(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name $asg --query 'AutoScalingGroups[*].DesiredCapacity' --output text)
MaxSize=$(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name $asg --query 'AutoScalingGroups[*].MaxSize' --output text)
JSON_STRING=$( jq -n \
--arg cn "$cluster" \
--arg asg "$asg" \
--arg MinSize "$MinSize" \
--arg DesiredCapacity "$DesiredCapacity" \
--arg MaxSize "$MaxSize" \
'{cluster: $cn, asgname: $asg, minSize: $MinSize, DesiredCapacity: $DesiredCapacity, MaxSize: $MaxSize}' )
echo "${JSON_STRING}," >> state.json
done
done
#Finalizing Current State file
echo "]" >> state.json
$ cat state.json
[
{
"cluster": "eks-b",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "eks-b",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "dev",
"asgname": "eks-12345",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "dev",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "eks-a",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "eks-a",
"asgname": "eks-1323",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
]
jq驗證:
$ cat state.json | jq empty
parse error: Expected another array element at line 44, column 1
我嘗試了多種選擇,主要是使用sed,但沒有滿足僅洗掉最后一次出現的},
任何建議的具體要求。
uj5u.com熱心網友回復:
讓您的腳本通過不列印括號和逗號來生成物件流。
echo "${JSON_STRING}" >> state.json
state.json然后應該包含一個物件流:
{
"cluster": "eks-b",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
}
{
"cluster": "eks-b",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
}
{
"cluster": "dev",
"asgname": "eks-12345",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
}
{
"cluster": "dev",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
}
{
"cluster": "eks-a",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
}
{
"cluster": "eks-a",
"asgname": "eks-1323",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
}
現在您可以使用 jq 讀取該流,使用-s選項將其轉換為適當的陣列。
jq -s . state.json
[
{
"cluster": "eks-b",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "eks-b",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "dev",
"asgname": "eks-12345",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "dev",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "eks-a",
"asgname": "eks-1234",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
},
{
"cluster": "eks-a",
"asgname": "eks-1323",
"minSize": "0",
"DesiredCapacity": "0",
"MaxSize": "0"
}
]
jq -s零件演示_
uj5u.com熱心網友回復:
如果您不需要列印出漂亮的最終結果,則可以jq -s通過洗掉多余的逗號來節省呼叫費用,例如
sed '$s/,$//'
或者如果你喜歡:
sed -i.bak '$s/,$//'
更好的是,您可以避免在同一步驟中處理終止的 ']',例如使用 '$s/,$/]/'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/445690.html
