我正在编写一个bash脚本,该脚本从用户输入中获取用户名,并显示其AWS访问密钥和创建日期。
我使用jq解析命令的输出。
输出看起来像这样:
Enter a user name:
ralph
User ralph keys:
AKIAJS7KPHZCQRQ5FJWA
2016-08-31T15:38:18Z
AKIAICDOHVTMEAB6RM5Q
2018-02-08T03:55:51Z
如何拆分输出,以便在日期旁边列出访问密钥?
我希望输出看起来像这样:
AKIAJS7KPHZCQRQ5FJWA : 2016-08-31T15:38:18Z
AKIAICDOHVTMEAB6RM5Q : 2018-02-08T03:55:51Z
到目前为止,这是我的代码:
echo "Enter a user name: "
read -r user_name
keys=( $(aws iam list-access-keys --profile=prod | jq -r '.AccessKeyMetadata[] | (.AccessKeyId, .CreateDate)') )
echo "User $user_name keys:"
for key in "${keys[@]}"
do
echo "$key"
done
答案 0 :(得分:2)
(请注意,我只更改了aws iam
命令。)
$ aws iam list-access-keys | jq -r '.AccessKeyMetadata[] | (.AccessKeyId, .CreateDate)' | awk 'NR%2{k=$0;next}{print k " : " $0}'
AKIAIXXXXXXXXX : 2014-10-07T14:56:12Z
AKIAIYYYYYYYYY : 2015-01-10T12:18:01Z
换句话说,摆脱循环:
echo "Enter a user name: "
read -r user_name
echo "User $user_name keys:"
aws iam list-access-keys --profile=kpmg-prod \
| jq -r '.AccessKeyMetadata[] | (.AccessKeyId, .CreateDate)') \
| awk 'NR%2{k=$0;next}{print k " : " $0}'
如果您正在该循环中做其他事情:
n=0
for i in $(aws iam list-access-keys | jq -r '.AccessKeyMetadata[] | (.AccessKeyId, .CreateDate)')
do
if [ $n -eq 0 ]; then
id="$i"
let n=1+$n
else
n=0
date="$i"
echo "$id : $date"
fi
done
答案 1 :(得分:1)
您可以尝试使用tr '\n' ':'
,我想它将在keys
变量中用':'代替换行符。