对于前台单板上众多的日志和显示结果,如何从中找出所有自己感兴趣的内容,并组成成自己需要的文件呢?脚本可以快速实现这种“查找-复制-粘贴-修改”的繁重机械任务。
使用的perl脚本
例如某版本查询显示内容如下,我需要将几十甚至几百个版本进行相应的操作,将原始数据进行处理生成批处理文件。Perl提供了强大的文本操作功能,尤其是正则表达式,可以非常方便的处理下面的文本。
原始输入文本如下,有数百行。
Operation Result: Success
Total Records: 12
Records Number: 10
Record Information:
Rack Number: 3
Shelf Number: 1
Slot Number: 12
CPU Number: 1
Physical Index: 0
Package Name: servapp.pkg
Package Version Number: 0x11012001
Appointed Active Time: 2011-12-14 09:17
Package External Version Number: 0xffffffff
Rack Number: 3
Shelf Number: 1
Slot Number: 14
CPU Number: 1
Physical Index: 0
Package Name: servapp.pkg
Package Version Number: 0x11012001
Appointed Active Time: 2011-12-14 09:17
Package External Version Number: 0xffffffff
需要转换为下面的操作命令行
INSTALL_DEACTIVE_APTD servapp.pkg 285286401 1 3-1-12-1
INSTALL_DEACTIVE_APTD servapp.pkg 285286401 1 3-1-14-1
...
使用的perl脚本
#! /usr/bin/perl
use Math::BigInt;
if(!open FILEIN, "<apt.txt")
{
die "Open file failed: $!";
}
my @text=<FILEIN>;
close FILEIN;
chomp(@text);
my $newpkg = 0;
my $phy;
my $cmdstr;
my $input;
my $x;
foreach $input (@text) {
#print "$_\n";
my @word=split(":",$input);
if($word[0] eq "Rack Number"){
if($newpkg != 0){
print "Bad pkg.";
}
$newpkg = 1;
$x = $word[1];
$x =~s/ //g;
$phy="$x-";
$cmdstr="INSTALL_DEACTIVE_APTD";
}
elsif($newpkg == 0){
next;
}
elsif($word[0] eq "Shelf Number"){
$x = $word[1];
$x =~s/ //g;
$phy.="$x-";
}
elsif($word[0] eq "Slot Number"){
$x = $word[1];
$x =~s/ //g;
$phy.="$x-";
}
elsif($word[0] eq "CPU Number"){
$x = $word[1];
$x =~s/ //g;
$phy.="$x";
#print "phy is $phy\n";
}
elsif($word[0] eq "Package Name"){
$cmdstr.=" $word[1]";
}
elsif($word[0] eq "Package Version Number"){
$x = $word[1];
$x =~s/ //g;
$x = Math::BigInt->from_hex($x);
$cmdstr.=" $x 1 $phy";
$newpkg = 0;
print "$cmdstr\n";
}
}