我有这个包含服务帐户的 service-accounts-list.txt
文件:
serviceAccount:p12345-001@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-002@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-003@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-004@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com
和这个我想将数据 append 到的 results.json
文件:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
}
]
}
预期结果:我想为 service-accounts-list.txt
中的每一行添加一个对象,如下所示:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-001@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-002@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-003@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-004@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com"
}
]
}
到目前为止,我的 bash 脚本如下所示:
while read p;
do
cat result.json | jq --arg email "$p" '.access += [{"role": "WRITER", "userByEmail": $email}]' > result.json
done < service-accounts-list.txt
生成的 result.json
文件实际上是空的。如果我将输出重定向到 example > result2.json
,它会正确添加最后一个服务帐户,如下所示:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com"
}
]
}
看来 jq
语法是正确的。我尝试添加 --unbuffered
标志但无济于事。
我错过了什么?
最佳答案
也许最简单有效的解决方案是:
jq -nR --argfile result result.json '
$result
| .access += [{role: "WRITER", userByEmail: inputs}]
' service-accounts-list.txt
注意——没有 slurping,没有 split ,没有 shell 脚本。如果您对 --argfile 的使用感到困扰,请随意使用 --slurpfile 但通过编写 $result[0]
来“取消”$result。
https://stackoverflow.com/questions/61737304/
相关文章:
kubernetes - Cloud Composer 实例节点和自动缩放
json - 在 typescript 中为 JSON 文件添加类型定义
java - Intellij Idea : sbt refresh FetchError$Down
google-cloud-platform - GCP Nat 后超时
python - 如何在 Nifi 中将 pandas 数据帧从一个处理器传递到另一个处理器?
python - Pandas to_numpy() 生成列表数组。如何从中获取二维 numpy 数