Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 从Nagios到check_mk config有三个步骤,我怎么能做得更好?_Vim_Awk - Fatal编程技术网

Vim 从Nagios到check_mk config有三个步骤,我怎么能做得更好?

Vim 从Nagios到check_mk config有三个步骤,我怎么能做得更好?,vim,awk,Vim,Awk,这次我用OMD&check_mk安装了一个新的Nagios,而不是手工操作。交换机在DNS中没有正确的主机名,因此check_mk提供了一种在配置文件中指定IP的方法。昨晚我正在转换一些交换机的配置文件,我试了几分钟想一次性完成,但后来放弃了 输入示例: define host{ use generic-switch host_name BAR.MDF.MODEL alias BAR.MDF.MODEL parents FO

这次我用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总是在主机名之后,所以它是相当安全/一致的

{ awk '/host_name/ || /address/ { print $2 }' < switch.cfg; } >> out.txt
然后我做了这个

{ awk '!/^1/{ getline ip; print $0, ip; next }' < out.txt; } >> out2.txt
其余的格式化是通过“norm”和宏等在vim中完成的

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

试试看这是否适合你。仅限
awk

假设以下数据为
infle

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",
}

$1==“host\u name”{
if($1==“host\u name”){
的简写吗?我读对了吗?它求值为true,然后变量“hostname”设置为$2?有点像
[-e file]]&&rm文件
在bash?oops中。我没想到会提到它……这对于switch.cfg中的第一个主机定义是有效的,但有39个:s@Ryan:更新答案。对于您的第一个问题,是的。如果条件成功,请在花括号内执行说明。我今天散步时确实在想……hrmm没有休息或休息吗退出那里,我可以摆脱。我不知道这是否会工作。回来尝试,并看到您的更新。非常感谢。肯定学到了一些东西,我会在这里再次使用。
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",
}