首页 > 解决方案 > AWS CLI 命令修改/裁剪输出?

问题描述

我正在寻找使用 AWS CLI --query 标志裁剪单个字段输出的方法。

例如,我可以通过管道传递cut命令来剪切每行的一部分,但这需要手动计算名称中的字符。

$ aws --region us-east-1 cloudwatch describe-alarms \
     --query 'MetricAlarms[*].{AlarmName:AlarmName,MetricName:MetricName,Namespace:Namespace,Threshold:Threshold,Time:StateUpdatedTimestamp,State:StateValue}' \
     --output table | cut -c1-50,97-147,197-500

任何人都知道这样做的创造性方法,而不必知道(可变长度)字段长度?

  1. 一种将 MetricName 字段更改为 --query 的一部分的方法,因此该表仅显示指标的前 50 个字符?

或者

  1. 一种将 cli 表输出中管道之间的长度限制为最多 50 个字符的命令的管道方式?

或者

  1. 从 aws 命令输出为 JSON,更改字段(可能使用 jq?),然后将 json 输出到类似于将要的表aws <command> --output table

谢谢!

标签: amazon-web-servicesoutputaws-cli

解决方案


我能得到的最接近的是管道分隔的输出,您可以使用下面的示例指定字符串字段的最大长度。如果您需要它,您将需要做更多的工作--output table。下面列出的是示例产生管道分隔的输出,所有字符串字段都被截断为长度 10

aws cloudwatch describe-alarms --query 'MetricAlarms[*].{"AlarmName":"AlarmName","MetricName":"MetricName","Namespace":"Namespace","Threshold":"Threshold","Time":"StateUpdated","State":"StateValue"}' --output json | jq '.[][] |= (if type == "string" then .[0:10] else .|tostring end) | .[] | join(" | ") '

下面列出的是它提供的输出

"TargetTrac | ConsumedWr | AWS/Dynamo | 210 | null | OK"
"TargetTrac | Provisione | AWS/Dynamo | 5 | null | OK"
"TargetTrac | Provisione | AWS/Dynamo | 5 | null | OK"
"TargetTrac | ConsumedWr | AWS/Dynamo | 210 | null | OK"
"TargetTrac | Provisione | AWS/Dynamo | 5 | null | OK"
"TargetTrac | Provisione | AWS/Dynamo | 5 | null | OK"

推荐阅读