1

我正在使用 OMD 和 check_mk 设置新的 Nagios 安装,而不是这次手动完成所有操作。交换机在 DNS 中没有正确的主机名,因此 check_mk 提供了一种在配置文件中指定 IP 的方法。昨晚我正在转换一些交换机的配置文件,我尝试了几分钟来一次完成,但后来认输了。

示例输入:

define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.1
    }

所需输出:

ipaddresses = {
  "BAR.MDF.MODEL" : "10.1.1.1",
}

这就是我所做的。

我知道 IP总是在 host_name 之后,所以它相当安全/一致

{ awk '/host_name/ || /address/ { print $2 }' < switch.cfg; } >> out.txt

这让我

BAR.MDF.MODEL
10.1.1.1

然后我做了这个

{ awk '!/^1/{ getline ip; print $0, ip; next }' < out.txt; } >> out2.txt

得到这个:

BAR.MDF.MODEL 10.1.1.1

其余的格式化是通过“规范”和宏等在 vim 中完成的

  "BAR.MDF.MODEL" : "10.1.1.1",
4

1 回答 1

3

试试这是否适合你。只有awk.

假设以下数据infile

define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.1
    }
define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL.2
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.2
    }
define host{
    use         generic-switch
    host_name   BAR.MDF.MODEL.3
    alias       BAR.MDF.MODEL
    parents     FOO.MDF.MODEL.01
    address     10.1.1.3
    }

运行此awk脚本:

awk '
    BEGIN { print "ipaddresses = {"; } 
    $1 == "host_name" { 
        hostname = "\"" $2 "\""; 
        next; 
    } 
    $1 == "address" { 
        address = "\"" $2 "\"";
        printf "\t%s : %s,\n", hostname, address;
    } 
    END {
        printf "}\n";
    }
' switch.cfg

这会产生:

ipaddresses = {
        "BAR.MDF.MODEL" : "10.1.1.1",
        "BAR.MDF.MODEL.2" : "10.1.1.2",
        "BAR.MDF.MODEL.3" : "10.1.1.3",
}
于 2012-10-06T17:31:27.527 回答