在使用Nagios V1的现有项目中,我们需要将其升级到Nagios V3。 一切都很好,除了在两个版本之间发生变化的状态文件(status.dat)。 使用旧状态文件格式的perl脚本太多,无法更改它们。相反,我想编写一个perl代码,将状态文件从新格式转换为旧格式:
为了简化问题(可以考虑作为perl问题):
输入文件是这样的:
hoststatus {
key1=val1
key2=val2
key3=val3
}
hoststatus {
key1=val4
key2=val5
key3=val6
}
servicestatus {
key11=val11
key12=val12
key13=val13
}
servicestatus {
key11=val14
key12=val15
key13=val16
}
应该转换成这个文件:
HOST;val1;val3;val2
HOST;val4;val6;val5
SERVICE;val13;val11;val12
SERVICE;val16;val14;val15
Note the values are written following a chosen keys order. In the above listing :
"key1,key3,key2" for hoststatus blocks
"key13,key11,key12" for servicestatus blocks
如何在Perl中编写代码?
答案 0 :(得分:1)
我认为每个主机状态& servicestatus块总是只包含3个键值,新订单总是第一个,第三个,第二个为HOST,第三个,第一个,第二个为SERVICE
#!/usr/bin/perl
use warnings;
use strict;
open (my $IN,'<','status.dat') or die "$!";
my $type;
my @v;
while (<$IN>) {
chomp;
if (/(.+)status/) {
$type=uc $1;
}
elsif (/=(.+)/) {
push @v,$1;
}
elsif (/\}/) {
if ($type eq 'HOST') {
print join(';',$type,$v[0],$v[2],$v[1]),"\n";
}
elsif ($type eq 'SERVICE') {
print join(';',$type,$v[2],$v[0],$v[1]),"\n";
}
undef @v;
}
}
close $IN;