尝试编写一个脚本,该脚本打开一个目录并逐行读取多个日志文件,并搜索以下信息:
“出勤率= 0”以前我使用grep "Attendance ="
*
来搜索我的信息,但尝试编写脚本来搜索我的信息。
需要你的帮助才能完成这项任务。
#!/usr/bin/perl
use strict;
use warnings;
my $dir = '/path/';
opendir (DIR, $dir) or die $!;
while (my $file = readdir(DIR))
{
print "$file\n";
}
closedir(DIR);
exit 0;
答案 0 :(得分:1)
你的perl经历是什么?
我假设每个文件都是文本文件。我会给你一个提示。试着找出放置此代码的位置。
# Now to open and read a text file.
my $fn='file.log';
# $! is a variable which holds a possible error msg.
open(my $INFILE, '<', $fn) or die "ERROR: could not open $fn. $!";
my @filearr=<$INFILE>; # Read the whole file into an array.
close($INFILE);
# Now look in @filearr, which has one entry per line of the original file.
exit; # Normal exit
答案 1 :(得分:0)
我更喜欢使用File::Find::Rule
来做这样的事情。它保留了路径信息,并且易于使用。这是一个做你想做的事的例子。
use strict;
use warnings;
use File::Find::Rule;
my $dir = '/path/';
my $type = '*';
my @files = File::Find::Rule->file()
->name($type)
->in(($dir));
for my $file (@files){
print "$file\n\n";
open my $fh, '<', $file or die "can't open $file: $!";
while (my $line = <$fh>){
if ($line =~ /Attendance =/){
print $line;
}
}
}