我的问题与这个问题类似,但我需要做更多的事情,但不太清楚该怎么做。
这是我的 JSON 字符串
{
"value": "1"
}
{
"value": "3"
}
{
"value": "4"
}
Run Code Online (Sandbox Code Playgroud)
我需要在 BASH 中编写一个脚本来输出
在上面的示例中,json 数组中缺少 2。脚本应返回 2。如果数组中存在 2,则应返回 5。
我想我也许可以在 bash 中使用 while 循环编写逻辑来增加数字,但我陷入了困境,无法弄清楚如何仅使用该值将此 JSON 字符串转换为 bash 数组。
下面是我用来获取 JSON 输出的确切命令。这是 AWS CLI 命令,用于从 AWS 获取具有特定标签的所有实例。
readarray -t arr < <(aws ec2 describe-instances --region=us-east-1 --filters --filters "Name=tag:NodeType,Values=worker" --query "Reservations[].Instances[].Tags[]" | jq -r '.[] | select(.Key == "NodeNumber") | {value: .Value}')
printf '%s\n' "${arr[@]}"
Run Code Online (Sandbox Code Playgroud)
以上返回我
{
"value": "1"
}
{
"value": "3"
}
{
"value": "4"
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要将 VALUE 字段“value”作为 bash 数组获取
使用 jq 的“-s”命令行选项,以下内容满足我理解的要求,同时也概括了它们:
map(.value | tonumber)
| unique
| (1+max - min) as $length
| if $length > length then ([range(min;max+1)] - .)[]
else max+1
end
Run Code Online (Sandbox Code Playgroud)
如果您只想要最少的缺失值,请将“if”行上的“[]”替换为[0],