How to use Perl to grep specific information from many files in a list of directories
本问题已经有最佳答案,请猛点这里访问。
我有一个这样的目录结构
1 |
其中
我需要从所有日志中提取一些信息。目前我使用
然后将
有没有更有效的方法来做到这一点?
我会在纯 Perl 中使用类似的东西。我认为很多问题在于无法保证该过程正在取得进展。此解决方案将遇到的每个子目录和每个日志文件的名称打印到 STDERR,但将所有 grepped 行发送到 STDOUT。
您必须修改
如果您愿意,生成"完成百分比"数字或估计完成时间不会太难。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | use strict; use warnings; use autodie; use File::Spec; my $workdir = '/path/to/work/dir'; opendir my($dh), '.'; my @subdirs = grep { -d and /\\A[^.]/ } readdir $dh; closedir $dh; for my $subdir (@subdirs) { $subdir = File::Spec->catdir($workdir, $subdir); print STDERR"$subdir\ "; opendir my($dh), $subdir; my @logs = grep { /\\.log\\z/i } readdir $dh; closedir $dh; @logs = grep { -f } map { File::Spec->catfile($subdir, $_) } @logs for my $log (@logs) { print STDERR" $log\ "; open my $fh, '<', $log; while (<$fh>) { print" $_" if /condition/; } } } |