Perl - 从目录中对日志文件进行排序,获取最新生成的日志文件并仅打印特定数据

时间:2012-08-21 07:19:50

标签: perl

我是perl的新手,我需要开发一个脚本来对目录中的日志进行排序,拾取最新文件并仅复制日志文件中的特定内容并将其打印到新文件中。我写了一个下面的perl脚本,我需要你的宝贵意见。

my($dir) = "C:\Luntbuild_Logs\LACOPBOC LACOPBOC_LASQABOCFC_";
$file = #Here i want to pick up the last generated log file from the above dir
my($newLog) = "new.log";
while (<MYFILE>) {
    print "$line" if $line =~ /> @/;
    print "$line" if $line =~ /ORA-/;
 }
 close (MYFILE);

I want my code to pick up the last generated log file from the dir and print the specific lines and redirect the output to the new log file.

你能不能在下面的代码上纠正我现在我的srript能够排序和打印最新文件(目录中的所有文件都是txt文件)但是我无法执行该操作

use File::stat;
$dirname = 'C:/Luntbuild_Logs';
$timediff=0;
opendir DIR, "$dirname";
while (defined ($file = readdir(DIR)))
{
                if($file ne "." && $file ne "..")
                {
                                $diff = time()-stat("$dirname/$file")->mtime;
                                if($timediff == 0)
                       {
                                $timediff=$diff;
                                $newest=$file;
                       }
                if($diff<$timediff)
                                       {
                                $timediff=$diff;
                                $newest=$file;
                       }
        }
}
open(FILE,"<$newest");
my(@fprint) = <FILE>;
close FILE;
open(FOUT,">list1.txt") || die("Cannot Open File");
foreach $line (@fprint) {
    print "$line" if $line =~ /> @/;
    print "$line" if $line =~ /ORA-/;
    print FOUT $line;
}
close FOUT;

1 个答案:

答案 0 :(得分:0)

这是获取目录中文件的简单方法(注意正斜杠在Windows中工作并且是首选):

chdir "C:/Luntbuild_Logs/LACOPBOC LACOPBOC_LASQABOCFC_";
my @files = <*>;

您应该验证您是否只获取了正确类型的文件。在Windows上,您通常可以通过扩展程序执行此操作。假设您的所有文件都以.log结尾。将上一行替换为:

my @files = grep {/\.log$/} <*>;

下一步,我建议您查看this question,它提供了许多解决方案来查找文件的修改时间。