Хотите прочитать «Элементы» из ответа AWS CLI. и хотите написать «для цикла» в «Предметах». Но я не могу сделать это в сценарии оболочки. Формат вывода команды AWS cli — формат JSON.
Код Ш:
[ ~]$ response_scan=`aws dynamodb scan --table-name recovery-plan --max-items 10 --attributes-to-get '["job_id", "job_type", "launch_category"]'`
[ ~]$ echo $response_scan
{
"Count": 166,
"Items": [
{ "launch_category": { "S": "TOT" }, "job_type": { "S": "TEST" }, "job_id": { "S": "39504214122e" } },
{ "job_type": { "S": "TEST" }, "job_id": { "S": "8c48-914d0aa2a186" } },
{ "job_type": { "S": "TEST" }, "job_id": { "S": "cbd07892491d" } },
{ "job_type": { "S": "TEST1" }, "job_id": { "S": "7afef48b0283" } },
{ "job_type": { "S": "TEST" }, "job_id": { "S": "7d678fab68e1" } }
],
"NextToken": "eyJFasasaseGNsdXasasaslX2Ftb3VudCasasI6IDEwfQ= = ",
"ScannedCount": 166,
"ConsumedCapacity": null
}
Может ли кто-нибудь помочь мне перебрать response_scan["Items"] ?
Что я делаю именно: Я хочу добавить поле - launch_category к элементам/строкам, в которых нет этого поля. Значение launch_category равно TOT для TEST и TOT1 для TEST1.
@JohnRotenstein: я хочу обновить элементы, у которых нет поля launch_category.
Обновление элементов из сценариев оболочки несколько запутано. Рассматривали ли вы вместо этого использование такого языка, как Python? Это даст вам гораздо больше контроля благодаря встроенной обработке JSON.
@JohnRotenstein: Да, я знаю из Python (boto3). Это легко. но попробуй сделать в скрипте shell/bash.

response_scan=$(aws dynamodb scan --table-name recovery-plan --max-items 10 --attributes-to-get '["job_id", "job_type", "launch_category"]' --query Items[].job_type.S --output text )
Или вы можете использовать jq для разбора json — https://stedolan.github.io/jq/
Приведенный выше ответ все еще работает, обновление здесь в соответствии с документацией AWS рекомендуется с использованием --projection-expression вместо --attribute-to-get.
--attributes-to-get (list)
This is a legacy parameter. Use ProjectionExpression instead. For more information, see AttributesToGet in the Amazon DynamoDB Developer Guide .
response_scan=$(aws dynamodb scan
--table-name recovery-plan
--max-items 10
--projection-expression "job_id, job_type,launch_category"
--query Items[].job_type.S --output text
)
Что вы подразумеваете под "перебирать"? Что вы будете делать с каждым значением?