将bash数组的输出拆分为行

将bash数组的输出拆分为行,bash,Bash,我正在编写一个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 AKIAICDOHVTMEA

我正在编写一个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
如何分割该输出,以便在日期旁边列出访问密钥

我希望输出如下所示:

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

您可以尝试使用
tr'\n':'
,我想这将在
键中用“:”替换换行符
变量(注意,我稍微更改了
aws iam
命令)

换句话说,摆脱循环:

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

谢谢,这让我走了一段路。这将换行符替换为:,但输出都在一行上。Shell数组总是让我感到困惑,所以我尽量避免。