如果给定的字符串匹配,则打印第1行

时间:2017-05-11 09:31:30

标签: linux

我有一个包含以下行的文件。所有具有相同定义的服务如下。如果给定的字符串与contact_groups

匹配,我有打印主机名和服务描述

例如:如果我将字符串contact_groups作为sunil,它应该打印Service_description和host_name。对此有任何建议

awk '/sunil/{nr[NR-4]}; NR in nr' test.cfg
我正在使用下面的鳕鱼。但是没有工作

data

2 个答案:

答案 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