微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

aws ec2 文本输出打印在多行上

如何解决aws ec2 文本输出打印在多行上

我正在尝试使用以下查询提取有关我的某些 ELB 实例的一些相关信息

aws elb describe-load-balancers --load-balancer-name my-elb \
 --query 'LoadBalancerDescriptions[*].[LoadBalancerName,DNSName,Scheme,\
 SourceSecurityGroup.GroupName,SecurityGroups,Instances[*].InstanceId ]

输出如下

- - - my-elb
    - my-elb-15451562.us-east-1.elb.amazonaws.com
    - internet-facing
    - my-elb-sg
    - - sg-ef113b0d
    - - i-00633c0d3a103b3e9

我的问题是:当我执行 --output text 时,最后两个元素各自以单独的行结束。这会破坏 TSV 格式和随后的 LibreCalc 输入。

如何防止这种情况发生,以便 TSV 的导入显示在一行上?

解决方法

问题在于 ELB 和实例之间存在一对多关系。一个 ELB 可以链接多个实例。这使得难以显示为 CSV/TSV,因为列数是可变的。

如果您知道有一个固定数量的实例总是与该 ELB 相关联,那么您可以将查询更改为:

aws elb describe-load-balancers --load-balancer-name my-elb \
 --query 'LoadBalancerDescriptions[*].[LoadBalancerName,DNSName,Scheme,\
 SourceSecurityGroup.GroupName,SecurityGroups,Instances[0].InstanceId,Instances[1].InstanceId ]
,

通过管道传递粘贴命令 | paste -d"\t" -s

,我能够得到我想要的结果

当有未知的新行时,我想知道有 SED 或 AWK 解决方案吗?

,

您实际上可以通过创建一个人工数组来解决这个问题,然后在这个人工数组上使用 flatten operator — [] —。

给定 JSON:

{
  "LoadBalancerDescriptions": [
    {
      "Subnets": [
          "subnet-15aaab61"
      ],"CanonicalHostedZoneNameID": "Z3DZXE0EXAMPLE","CanonicalHostedZoneName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com","ListenerDescriptions": [
          {
              "Listener": {
                  "InstancePort": 80,"LoadBalancerPort": 80,"Protocol": "HTTP","InstanceProtocol": "HTTP"
              },"PolicyNames": []
          },{
              "Listener": {
                  "InstancePort": 443,"SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-cert","LoadBalancerPort": 443,"Protocol": "HTTPS","InstanceProtocol": "HTTPS"
              },"PolicyNames": [
                  "ELBSecurityPolicy-2015-03"
              ]
          }
      ],"HealthCheck": {
          "HealthyThreshold": 2,"Interval": 30,"Target": "HTTP:80/png","Timeout": 3,"UnhealthyThreshold": 2
      },"VPCId": "vpc-a01106c2","BackendServerDescriptions": [
          {
              "InstancePort": 80,"PolicyNames": [
                  "my-ProxyProtocol-policy"
              ]
          }
      ],"Instances": [
          {
              "InstanceId": "i-207d9717"
          },{
              "InstanceId": "i-afefb49b"
          }
      ],"DNSName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com","SecurityGroups": [
          "sg-a61988c3"
      ],"Policies": {
          "LBCookieStickinessPolicies": [
              {
                  "PolicyName": "my-duration-cookie-policy","CookieExpirationPeriod": 60
              }
          ],"AppCookieStickinessPolicies": [],"OtherPolicies": [
              "my-PublicKey-policy","my-authentication-policy","my-SSLNegotiation-policy","my-ProxyProtocol-policy","ELBSecurityPolicy-2015-03"
          ]
      },"LoadBalancerName": "my-load-balancer","CreatedTime": "2015-03-19T03:24:02.650Z","AvailabilityZones": [
          "us-west-2a"
      ],"Scheme": "internet-facing","SourceSecurityGroup": {
          "OwnerAlias": "123456789012","GroupName": "my-elb-sg"
      }
    }
  ]
}

https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html#examples

为例

查询:

LoadBalancerDescriptions[*].[ [LoadBalancerName,SourceSecurityGroup.GroupName,Instances[*].InstanceId][] ]

将产生 JSON

[
  [
    [
      "my-load-balancer","my-load-balancer-1234567890.us-west-2.elb.amazonaws.com","internet-facing","my-elb-sg","sg-a61988c3","i-207d9717","i-afefb49b"
    ]
  ]
]

相当于 YAML

- - - my-load-balancer
    - my-load-balancer-1234567890.us-west-2.elb.amazonaws.com
    - internet-facing
    - my-elb-sg
    - sg-a61988c3
    - i-207d9717
    - i-afefb49b

根据需要,您可以根据需要进一步展平:

LoadBalancerDescriptions[*].[ [LoadBalancerName,Instances[*].InstanceId][] ][]

给予

- - my-load-balancer
  - my-load-balancer-1234567890.us-west-2.elb.amazonaws.com
  - internet-facing
  - my-elb-sg
  - sg-a61988c3
  - i-207d9717
  - i-afefb49b

LoadBalancerDescriptions[*].[ [LoadBalancerName,Instances[*].InstanceId][] ][][]

给予

- my-load-balancer
- my-load-balancer-1234567890.us-west-2.elb.amazonaws.com
- internet-facing
- my-elb-sg
- sg-a61988c3
- i-207d9717
- i-afefb49b

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。