如何通过 bash 脚本对单词匹配进行排序

如何通过 bash 脚本对单词匹配进行排序

该命令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-1name有一个状态state#这符合第一个节点

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

因此我从 grep like status-nod1="$(ads2 cls create | grep state | cut -d '"' -f 2)"&开始name-nod1="$(ads2 cls create | grep name | cut -d '"' -f 2)"

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

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

那么我怎样才能按写入顺序输出匹配项,以便每个节点都与其状态匹配

答案1

这不是最有效的代码,但是它可以完成工作。

#! /bin/bash

mapfile -t name < <(ads2 cls create | grep -Po "name = \"\K.*(?=\")")
mapfile -t state < <(ads2 cls create | grep -Po "state = \"\K.*(?=\")")

a=0
while [[ $a -gt -1 ]]
do
        echo "NODE-$(echo $a+1 | bc) ${name[$a]} has the state ${state[$a]}"
        a=$((a+1))
        if [[ -z ${name[$a]} ]]
        then
                a=-2
        fi
done

将其粘贴到.sh文件中(例如node_status.sh),使其可执行(sudo chmod a+x node_status.sh)然后运行它(path/to/script/node_status.sh或者./node_status.sh如果您在脚本所在的目录中)。此脚本的优点是,当您添加节点(NODE-3 NODE-4 等)时,脚本可以处理该问题,并将为您提供每个节点(而不仅仅是前两个)的名称和状态。您可以有 100 个节点,它将提供所有 100 个节点的名称和状态。

相关内容