【问题标题】:How to order the word-match via bash script如何通过 bash 脚本排序单词匹配
【发布时间】:2021-03-23 09:37:39
【问题描述】:

命令ads2 cls create 产生以下输出:

cluster established ...
    nodes {
        node {
            name = "fdt-c-agx-0002";
            address = "http://172.16.11.89:9011/";
            state = "3";
        }
        node {
            name = "FDT-C-VM-0094";
            address = "http://172.16.11.49:9011/";
            state = "3";
        }
    }

我要做的是找到每个节点的name 及其状态,将每个节点分配给一个变量并打印它们,以便输出如下所示:

NODE-1 name有一个状态state #这符合第一个节点

NODE-2 name有一个状态state #这符合第二个节点

所以我从 status-nod1="$(ads2 cls create | grep state | cut -d '"' -f 2)"name-nod1="$(ads2 cls create | grep name | cut -d '"' -f 2)" 之类的 grep 开始。

这可行,但是会找到与 state 和“名称”的所有匹配项并因此返回

3
3
fdt-c-agx-0002
FDT-C-VM-0094

那么如何按写入顺序输出匹配,以便每个节点都匹配其状态

【问题讨论】:

    标签: bash shell command-line grep kernel


    【解决方案1】:

    如果你用 grep 查询状态和名字,你会按顺序得到详细信息

    ads2 cls create | grep '\(state\|name\) =' | cut -d '"' -f 2 \
    | while read name status ; do ...
    

    【讨论】:

    • 感谢您的回答。这真的很聪明,我将如何将它们打印为变量,因为我想检查状态是否等于 3,这表明工作节点成功。然后我必须打印节点名称及其状态
    • 我的意思是我想检查每个节点的状态是否为 3,这表示节点运行成功,如果只有两个节点的状态都是 3,则每个节点都打印其状态
    • “将它们打印为变量”是什么意思?当您将我的代码中的 ... 替换为 echo $name $status 时会发生什么?
    • 我的意思是像这样nameState="$(ads2 cls create | grep '\(state\|name\) =' | cut -d '"' -f 2)"。现在nameState 变量包含所有名称和状态,我想检查状态是否等于 3,然后相应地打印结果。这就是为什么我需要将它们保存在变量中
    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2017-11-25
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多