使用 aws cli 对 ebs 卷进行排序

问题描述 投票:0回答:1

我想获取 xyz 集群的所有实例的列表(将有 20 个 ec2)以及卷信息(设备名称和卷 ID)。有些实例的卷按一种顺序排列,有些实例的卷按不同的顺序排列。想要从此输出中对设备进行排序,我该怎么做?

aws ec2 describe-instances --filters 'Name=tag:cluster,Values=xyz' --query "Reservations[].Instances[].[InstanceId,BlockDeviceMappings[].[DeviceName,Ebs.VolumeId][]]"  --output text | paste -d" " - -
-- This is how it gets it
i-abc /dev/sdc vol-sdc /dev/sdb vol-sdb /dev/sdd vol-sdad
i-def /dev/sdd vol-sdd /dev/sdb vol-sdb /dev/sdc vol-sdac

-- how I want it
i-abc /dev/sdb vol-sdb /dev/sdc vol-sdc /dev/sdd vol-sdad
i-def /dev/sdb vol-sdb /dev/sdc vol-sdc /dev/sdd vol-sdad
amazon-web-services aws-cli
1个回答
0
投票

我怀疑您是否能够使用 aws-cli 获得所需的输出。但你可以诉诸类似的东西

awk
:

$ cat file
i-abc /dev/sdc vol-sdc /dev/sdb vol-sdb /dev/sdd vol-sdd
i-def /dev/sdd vol-sdd /dev/sdb vol-sdb /dev/sdc vol-sdc
$ awk '
BEGIN{FS=OFS=" "} {
m=0;n=0; 
for (i=2;i<=NF;i++) {
  i%2!=0? mounts[m++]=$i : names[n++]=$i
};  
n=asort(mounts,sorted_mounts);
n=asort(names,sorted_names); 
printf "%s",$1; 
for (i=1;i<=n;i++) {
  printf " %s %s",sorted_names[i], sorted_mounts[i]} printf "\n"
}' file
i-abc /dev/sdb vol-sdb /dev/sdc vol-sdc /dev/sdd vol-sdd
i-def /dev/sdb vol-sdb /dev/sdc vol-sdc /dev/sdd vol-sdd
© www.soinside.com 2019 - 2024. All rights reserved.