這是我不清楚這過程的一部分需要自動化。我會通過「」想要自動從文件中讀取每個文件和grepping模式,「據此您大概已經有了一個文件列表。如果您確實需要構建文件列表以及下面添加的代碼。
一種方式:從每個文件把所有的模式和存儲在一個散(filename->陣列REF-用圖案)
my %file_pattern;
foreach my $file (@filelist) {
open my $fh, '<', $file or die "Can't open $file: $!";
$file_pattern{$file} = [ grep { /$pattern/ } <$fh> ];
close $fh;
}
的[ ]
需要參照由grep
返回的列表,即。構造一個「匿名數組」,並且該(引用)被賦值爲「文件」鍵值。
現在你可以處理你的模式,每個日誌文件
foreach my $filename (sort keys %file_pattern) {
print "Processing log $filename.\n";
my @patterns = @{$file_pattern{$filename}};
# Process the list of patterns in this log file
}
ADDED
爲了建造上面使用,從目錄中的一個已知列表文件@filelist
的列表中,使用核心File::Find 遞歸掃描提供的目錄並應用提供的子程序的模塊
use File::Find;
find({ wanted => \&process_logs, preprocess => \&select_logs }, @dir_list);
將子例程process_logs()
應用於找到的每個文件/目錄,並且可以使用上述的每個日誌模式填充散列,或者可以根據需要運行完整處理;您可以在模塊的$File::Find::name
下提供一個文件,以便隨您使用。您的子程序select_logs()
將包含代碼,用於過濾來自每個目錄中所有文件的日誌文件,即File::Find
正常進程,以便process_file()
僅獲取日誌文件。另一種方法是使用其他調用
find(\&process_all, @dir_list);
現在在哪裏子process_all()
應用於找到的所有文件,因此需要確保自身,它僅處理日誌文件。查看鏈接的文檔。
你可以顯示一個示例目錄結構和你想grep的字符串的例子嗎? – choroba
可能是'File :: Find'的工作。很難說沒有更多的信息你在做什麼。 – Sobrique
因此,文本文件具有unix grep的輸出,並且您想要使用該輸出? – bolav