2017-05-11 3 views
0

私は以下の行のファイルを持っています。すべてのサービスは以下のように同じ定義です。指定された文字列がcontact_groupsと一致する場合、私は印刷ホスト名とサービスの説明を持っています指定された文字列が一致する場合は1行目を出力

たとえば:contact_groupsという文字列をsunilとして与えると、Service_descriptionとhost_nameが出力されます。これに関する提案

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 
    } 

私は以下のコードを使用しています。しかし、別の記述に

awk '/sunil/{nr[NR-4]}; NR in nr' test.cfg 

答えて

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 
    } 

それはチャンクに分割持っている: xaaxabxacxad

を次は面白い:

$ find ./xa* | while read i; do grep -q -E 'contact_groups.*sunny' $i && grep service_description $i ; done 
    service_description   xvy 
    service_description   xvy 
+0

-pが動作していません – Rajesh

+0

システムにインストールされている 'split'コマンドのバージョンによって異なります。 Linuxでは 'csplit test.cfg '/ define service /' '{*}''を使うことができます。また、 'xx00'、' xx01'、 'xx02'などのような他のファイル名も生成します –

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 
関連する問題