我有一个包含以下行的文件。所有具有相同定义的服务如下。如果给定的字符串与contact_groups
匹配,我有打印主机名和服务描述例如:如果我将字符串contact_groups作为sunil,它应该打印Service_description和host_name。对此有任何建议
awk '/sunil/{nr[NR-4]}; NR in nr' test.cfg
我正在使用下面的鳕鱼。但是没有工作
data
答案 0 :(得分:2)
awk
按顺序处理这些行。当您执行nr[NR-4]
时,您已经越过了要打印的行,因此NR in nr
永远不会匹配。
您应该在变量中保存带有所需前缀的行,然后在联系人组匹配时打印它们。
awk '$1 == "service_description" {s = $2}
$1 == "host_name" {h = $2}
$1 == "contact_groups" && $2 ~/sunil/ { print s, h }' test.cfg
答案 1 :(得分:0)
将文件拆分为单独的描述:
$ split -p define test.cfg
您将在同一文件夹中获取名称为xa*
的文件。例如,在我的测试用例中:
define service {
service_description xvy
host_name abc
use generic-service
check_command checkCertificate!443!
check_interval 1440
contact_groups sunil
retry_interval 1440
servicegroups def
}
define service {
service_description xvy
host_name abc
use generic-service
check_command checkCertificate!443!
check_interval 1440
contact_groups sunny
retry_interval 1440
servicegroups def
}
define service {
service_description xvy
host_name abc
use generic-service
check_command checkCertificate!443!
check_interval 1440
contact_groups sunil
retry_interval 1440
servicegroups def
}
define service {
service_description xvy
host_name abc
use generic-service
check_command checkCertificate!443!
check_interval 1440
contact_groups sunny
retry_interval 1440
servicegroups def
}
它被分成了几个块:
xaa
xab
xac
xad
接下来发现有趣:
$ find ./xa* | while read i; do grep -q -E 'contact_groups.*sunny' $i && grep service_description $i ; done
service_description xvy
service_description xvy