需求:perl 脚本动态的获取配置文件,将有exception的异常大文件in.log 抓取exception异常出来写入一个小文件out.log中
问题:perl操作一个config.ini文件读取配置infilepath和outfilepath,perl脚本一直报找不到can not find file or dirctionary
perl代码如下:
#!/usr/bin/perl -W use strict; use warnings; my $configpath = "D:/Users/KONGJUNLONG280/workspace/PerlLog/config.ini"; my $infilepath = ""; my $outfilepath = ""; my $findkey = "JobExecutionException,NullPointerException,ClassCastException,SQLIntegrityConstraintViolationException,NullPointerException,ClassCastException,IllegalArgumentException,ArithmeticException,ArrayStoreException,IndexOutOfBoundsException,NegativeArraySizeException,NumberFormatException,SecurityException,UnsupportedOperationException"; our $system_name = ""; my @findkeyArray; my $lineFlag =0; my $i=0; my $temp=""; my $session="config"; my $configinfilepath="infilepath"; my $configoutfilepath="outfilepath"; my $flag=0; my $k; my $t=1; eval{ open(CONFIG,"<",$configpath)||die "cannot open the file: $!\n"; my @linelist=<CONFIG>; close CONFIG; foreach my $eachline(@linelist){ #print $eachline; $i = 0; $lineFlag = 0; $temp=0; if (my ($k,$v) = $eachline =~ /(\w+)=(.*)/){ if($k eq $configinfilepath){ print "$k ......$v\n"; $infilepath = $v; } if($k eq $configoutfilepath){ print "$k ......$v\n"; $outfilepath = $v; } } if($t%3==0 && $t != 1){ #print "one session\n"; #查询数据记录 @findkeyArray=split(/,/,$findkey); eval{ open(FILE,"<",$infilepath)||die "cannot open the filepath: $!\n"; }; if ($@ ne ''){ print "error >> ".$@."\n"; } while (my $line =<FILE>){ print "scan row ".$i."\n"; for my $key (@findkeyArray) { if($line =~ /$key/g){ $lineFlag = $i; } } if($i<($lineFlag+5) && $i>5){ $temp = $temp.$line; } elsif($i==($lineFlag+5)) { #wirte a file open(FH, ">>",$outfilepath) or die $!; print FH "$temp\n";#向文件写入内容 close(FH); } else{ $temp =""; } $i = $i + 1; } close FILE; } $t = $t + 1; } }; if ($@ ne ''){ die "error -->> ".$@."\n"; }
config.ini文件如下:
[config1] infilepath=/workspace/PerlLog/Logs/pcms.log outfilepath=/workspace/PerlLog/Logs/out1.log [config2] infilepath=/workspace/PerlLog/Logs/pcms.log outfilepath=/workspace/PerlLog/Logs/out2.log [config3] infilepath=/workspace/PerlLog/Logs/pcms.log outfilepath=/workspace/PerlLog/Logs/out3.log
发现问题:
-rw-r--r-- 1 oracle usr01 1596 Sep 14 12:22 out1.log -rw-r--r-- 1 oracle usr01 798 Sep 14 12:19 out1.log?
文件后面有?号,怎么会这样?肯定是文件格式不对了?config.ini里面明明是out1.log
解决方案:
参考:http://blog.csdn.net/love__coder/article/details/7693390顶
在window平台下,写好shell脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,却提示No such file or directory。ls 了下,确实有该文件,怎么会事呢,难道是文件格式兼容性问题?用vim打开该sh文件,输入:
[plain] view plain copy :set ff 回车,显示fileformat=dos,重新设置下文件格式: [plain] view plain copy :set ff=unix 保存退出: [plain] view plain copy :wq 再执行,竟然可以了。这个事情又给我提了次醒,程序尽量在linux下编写,迁移时,也许会少很多问题。vim的用法,可以参阅以前的blog:vim 常用命令