Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-自定义日志文件以仅显示特定错误_Perl - Fatal编程技术网

Perl-自定义日志文件以仅显示特定错误

Perl-自定义日志文件以仅显示特定错误,perl,Perl,我是perl新手,我们有一个类似于以下内容的日志文件: SQL> @D:\Luntbuild_Testing\ASCMPK\Files\MAIN\DATABASE\HOST\FILES\DDL\20120412_152632__1_CLTM_EVENT_ACC_ROLE_BLOCK.DDL SQL> CREATE TABLE CLTM_EVENT_ACC_ROLE_BLOCK 2 ( 3 EVENT_CODE VARCHAR2(4) , 4 ACC_ROLE V

我是perl新手,我们有一个类似于以下内容的日志文件:

SQL> @D:\Luntbuild_Testing\ASCMPK\Files\MAIN\DATABASE\HOST\FILES\DDL\20120412_152632__1_CLTM_EVENT_ACC_ROLE_BLOCK.DDL
SQL> CREATE TABLE CLTM_EVENT_ACC_ROLE_BLOCK
  2  (
  3  EVENT_CODE  VARCHAR2(4) ,
  4  ACC_ROLE  VARCHAR2(20)
  5  )
  6  ;
CREATE TABLE CLTM_EVENT_ACC_ROLE_BLOCK
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object 


SQL> @D:\Luntbuild_Testing\ASCMPK\Files\MAIN\DATABASE\HOST\FILES\DDL\20120412_173845__2_CLTM_EVENT_ACC_ROLE_BLOCK.DDL
SQL> DROP TABLE  CLTM_EVENT_ACC_ROLE_BLOCK;

Table dropped.
现在我需要一个脚本来只显示有ORA-XXX错误的脚本路径,脚本应该只显示与ORA-XXX错误相关的SQL>@D:\Luntbuild\u Testing\的路径,我已经尝试了以下内容,请您帮助我增强相同的功能

$file = 'c:\data.txt';
open(txt, $file);
while($line = <txt>) {
print "$line" if $line =~ /> @/; #here i want the output to display the path of the script with only ORA-xxx errors and ignore if there are no errors
print "$line" if $line =~ /ORA-/;
}
close(txt); 
$file='c:\data.txt';
打开(txt,$file);
而($line=){
如果$line=~/>@/#打印“$line”,这里我希望输出显示只有ORA xxx错误的脚本路径,如果没有错误则忽略
如果$line=~/ORA-/,则打印“$line”;
}
关闭(txt);

当您看到
@
标记时,不要立即打印该行,而是将其存储在变量中,仅当您实际看到错误时才打印出来:

$file = 'c:\data.txt';
open(txt, $file);
while($line = <txt>) {
$fn = $line if $line =~ /> @/; #here i want the output to display the path of the script with only ORA-xxx errors and ignore if there are no errors
print $fn, $line if $line =~ /ORA-/;
}
close(txt);
$file='c:\data.txt';
打开(txt,$file);
而($line=){
$fn=$line if$line=~/>@/##在这里,我希望输出只显示包含ORA xxx错误的脚本路径,如果没有错误则忽略
如果$line=~/ORA-/,则打印$fn,$line;
}
关闭(txt);

另外:编写
使用strict是一个很好的实践
使用警告位于脚本顶部<代码>使用严格
强制您使用
my
显式命名局部变量,这会捕获许多由于拼写错误而导致的错误。

我会做一些与您尝试的非常类似的事情:

$file = 'c:\data.txt';
open(F, $file);
my $last_cmd = '';
while (<F>) {
  $last_cmd = $_ if /^SQL\> \@D:/;
  print $last_cmd if /^ORA-/;
}
$file='c:\data.txt';
打开(F$文件);
我的$last_cmd='';
而(){
$last\u cmd=$\uif/^SQL\>\@D:/;
打印$last_cmd if/^ORA-/;
}

如果您能显示准确的输入和所需的输出,那就太好了。输入将来自如上所示的日志文件,我将读取日志文件,我需要的输出如下SQL>@D:\Luntbuild\u Testing\ASCMPK\Files\MAIN\DATABASE\HOST\Files\DDL\20120412\u 152632\u\u CLTM\u EVENT\u ACC\u ROLE\u BLOCK.DDL ORA-00955:名称已被现有对象SQL>@D:\Luntbuild\u Testing\ASCMPK\Files\升级脚本\POST\u 113\Typ\misd\u Typ.SQL ORA-02303:无法删除或用类型或表格替换类型家属非常感谢你们的帮助