从两行获取字符串

Kal*_*sov 2 perl awk grep sed

想要将输出转换为变量,从第一行想要每次都取最后一个结果.

There are 1 server(s) in cluster: SQL_GDM
MS_SQL_sql1.local.com---RUNNING
There are 2 server(s) in cluster: MONGO_GDM
MS_MONGO1_mongo1.local.com---RUNNING
MS_MONGO2_mongo2.local.com---RUNNING
Run Code Online (Sandbox Code Playgroud)

预期观点:

SQL_GDM|sql1.local.com|RUNNING
MONGO_GDM|mongo1.local.com|RUNNING
MONGO_GDM|mongo2.local.com|RUNNING
Run Code Online (Sandbox Code Playgroud)

现在我只关注服务器的状态:

grep -oP '(?<=---)\w+'
Run Code Online (Sandbox Code Playgroud)

我想知道如何删除MS _*_并仅保留主机,然后grep服务器的状态.

Bir*_*rei 5

一种方式.它使用正则表达式来分割字段,一个或多个连字符(-+)或冒号后跟可选空格字符(:[[:space:]]*).这样就更容易找到集群和状态.对于我拆分的服务器_并提取最后一个路径.

内容script.awk:

BEGIN {
        FS = "-+|:[[:space:]]*"
}

$0 ~ /:/ {
        cluster = $NF
        next
}

{
        n = split( $1, server, /_/ )
        printf "%s|%s|%s\n", cluster, server[ n ], $NF
}
Run Code Online (Sandbox Code Playgroud)

运行它像:

awk -f script.awk infile
Run Code Online (Sandbox Code Playgroud)

它产生:

SQL_GDM|sql1.local.com|RUNNING
MONGO_GDM|mongo1.local.com|RUNNING
MONGO_GDM|mongo2.local.com|RUNNING
Run Code Online (Sandbox Code Playgroud)