【问题标题】:Parsing a variable in bash - line by line and storing the value in a another variable逐行解析bash中的变量并将值存储在另一个变量中
【发布时间】:2016-12-12 14:38:49
【问题描述】:

我正在编写一个 nagios 脚本,如果我的任何 AWS 服务限制即将达到其阈值,它将提醒我。

我现在拥有的:

aws --profile=profile-name support describe-trusted-advisor-check-result --language en --check-id eW7HH0l7J9 --query "result.sort_by(flaggedResources[],&metadata[2])[].metadata" --output text --region us-east-1 | grep Yellow

上面命令的输出是

eu-west-1   VPC Internet gateways   5   4   Yellow
eu-west-1   VPC VPCs    5   4   Yellow

我想逐行解析输出并收集值:区域和服务;通知用户。

例如,我想通知用户

echo "The $1 has reached its limit in region $2"
where $1 would be internet gateway and $2 would be eu-west-1

有什么推荐吗?

【问题讨论】:

  • aws 命令选项卡的输出是否分开?
  • @dood 是的。
  • 你不能用 FS="\t" 将 AWS 命令​​的输出通过管道传输到 AWK,然后打印出你的消息吗?
  • @Kishorepandey :您对第二行的预期输出是什么?还是上面是一条连续的大线?
  • @Inian 你说的是哪一行?

标签: bash shell parsing console output


【解决方案1】:

如果我们假设 grepping 为“黄色”是您的条件,那么以下应该可以解决问题。你怎么看?

aws --profile=profile-name support describe-trusted-advisor-check-result --language en --check-id eW7HH0l7J9 --query "result.sort_by(flaggedResources[],&metadata[2])[].metadata" --output text --region us-east-1 | grep Yellow |\
awk -F"\t" '{print "The", $3, "has reached its limit in region", $1}'

【讨论】:

    【解决方案2】:

    使用bashprocess substitution <()。将以下行放入sample.sh,设置执行权限chmod +x sample.sh并以bash script.sh运行脚本

     #!/bin/bash
    
     while read -r first _ second third _ 
     do
          printf "%s %s %s\n" "The $second $third has reached its limit in region $first"
     done< <(aws --profile=profile-name support describe-trusted-advisor-check-result --language en --check-id eW7HH0l7J9 --query "result.sort_by(flaggedResources[],&metadata[2])[].metadata" --output text --region us-east-1 | grep Yellow)
    

    现在运行脚本,

    $ bash script.sh
    The Internet gateways has reached its limit in region eu-west-1  
    The VPCs 5 has reached its limit in region eu-west-1
    

    【讨论】:

    • @rici : 同意 op 的输出是一个大行制表符分隔
    • @Inian 感谢您的回复,但正如 rici 所提到的,它只读取一行,我正在寻找一种可以遍历 N 行的解决方案。问题中的示例有两行,但这可能会改变。不过,我非常感谢您的帮助。
    • @Kishorepandey :参考我的更新,逐行处理逻辑
    • @Kishorepandey:参考我的最新更新,修复了问题。
    • @Inian 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2012-11-22
    • 2018-07-20
    • 2015-11-08
    • 2018-09-18
    相关资源
    最近更新 更多