想要将输出转换为变量,从第一行想要每次都取最后一个结果.
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服务器的状态.
awk的一种方式.它使用正则表达式来分割字段,一个或多个连字符(-+)或冒号后跟可选空格字符(:[[: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)