【问题标题】:Extract data from terminal command [duplicate]从终端命令中提取数据[重复]
【发布时间】:2021-12-30 20:01:04
【问题描述】:

我正在查询:

az aks nodepool show \                                                                  ⎈ 
                --resource-group $RESOURCE_GROUP_NAME \
                --cluster-name $CLUSTER_NAME \
                --name $NODE_POOL_NAME -o table

我得到一个表名 ProvisiongState 的输出。我需要一些帮助来将该查询的结果收集到一个变量中,以便我可以对其进行检查,直到它从 UpgradingNodeImageVersion 变为 Succeeded。我正在考虑将其作为一个 shell 脚本或 Python 程序来实现。

表我需要从以下位置获取信息: 谢谢!

编辑:我用这个命令来得到我需要的东西。谢谢大家的帮助!

az aks nodepool show --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME | grep "\"provisioningState\": \"Succeeded\""

【问题讨论】:

  • 打印出什么?如果有密钥字符串,您可以在 shell 脚本中使用grep 进行操作。 grep 返回是否找到字符串的状态码。
  • @TimRoberts 用示例输出更新了主帖。谢谢。
  • 为了让人们能够测试样本,您应该提供示例输出作为文本,而不是屏幕截图。我们无法将您的屏幕截图导入答案以查看它在实践中是否正确,因此这样做意味着您会得到未经测试的答案(至少,未经测试的人没有az 和使用它的先决条件)。另请参阅Why not upload images of code/errors when asking a question?
  • 顺便说一句,你使用-o table而不是更容易解析的东西有什么原因吗?例如,-o json 可以让jq 挑选出您需要的确切数据,或者-o tsv 可以使用 awk 给出一个简单的答案。
  • ...您最终得到的结果可能类似于az ... -o json | jq -r '.[].ProvisioningState',但如果没有看到az ... -o json 的输出以了解它实际调用的相关字段,我无法确定。

标签: python linux shell awk grep


【解决方案1】:
az aks nodepool show \                                                                  
                --resource-group $RESOURCE_GROUP_NAME \
                --cluster-name $CLUSTER_NAME \
                --name $NODE_POOL_NAME -o table |
    grep -q UpgradingNodeImageVersion && echo Not done || echo Done

或者

az aks nodepool show \                                                                  
                --resource-group $RESOURCE_GROUP_NAME \
                --cluster-name $CLUSTER_NAME \
                --name $NODE_POOL_NAME -o table |
    grep -q Succeeded && echo Done || echo Not done

【讨论】:

  • a && b || c if a; then b; else c 相同——您可以同时运行 bc,因此即使在 @ 时也会发生 c 987654329@ 不是假的。诚然,当bc 实际上是echo 命令写入同一个目的地时可能没问题(如果一个失败,另一个可能也会这样做),但是在没有警告的情况下教授它会让人们容易尝试在该约束不成立时应用示例。
  • (另外,如果这回答了问题,则意味着该问题与Checking if output of a command contains a certain string in a shell script 重复)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2016-04-05
  • 2015-10-10
  • 1970-01-01
  • 2011-05-29
相关资源
最近更新 更多