使用 AWS CLI 对 EBS 卷进行排序

sort ebs volumes using aws cli

提问人:nmakb 提问时间:11/9/2023 最后编辑:nmakb 更新时间:11/11/2023 访问量:60

问:

我想获取 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-sdac /dev/sdd vol-sdd
亚马逊网络服务 AWS-CLI

评论


答:

1赞 Paolo 11/9/2023 #1

我怀疑您是否能够使用 aws-cli 实现所需的输出。但是你可以求助于这样的东西:awk

$ cat file
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
$ awk '{
  for (i=2;i<=NF;i+=2) {
  PROCINFO["sorted_in"]="@ind_str_asc";
    volumes[$i]=$(i+1)
  }; 
  {
    printf "%s",$1; 
    for (i in volumes) {
      printf(" %s %s", i, volumes[i])
    }; 
    printf "\n"
  }
}' file
i-abc /dev/sdb vol-sdb /dev/sdc vol-sdc /dev/sdd vol-sdad
i-def /dev/sdb vol-sdb /dev/sdc vol-sdac /dev/sdd vol-sdd