自动化脚本之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"; 
    } 
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值