Vim 从Nagios到check_mk config有三个步骤,我怎么能做得更好?
这次我用OMD&check_mk安装了一个新的Nagios,而不是手工操作。交换机在DNS中没有正确的主机名,因此check_mk提供了一种在配置文件中指定IP的方法。昨晚我正在转换一些交换机的配置文件,我试了几分钟想一次性完成,但后来放弃了 输入示例: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
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",
}