2017-01-30 41 views
1

誰能幫我用Perl腳本下面的問題:的Perl:如何從文件列表文件夾中搜索關鍵字列表不定

FILE1.TXT - >使用關鍵字搜索

Hello_ 
World! 
+Bye 
Temp- 

File2(可以是任何擴展名)在哪個關鍵字中搜索,File3,File4 ....

我想在File2中搜索File1中的所有關鍵字,並且如果找到它們,則打印關鍵字隨文件編號和行號一起找到該特定關鍵字被找到。

我想保留這些關鍵字和文件的數量不確定 - 他們可以添加和修改。

open(MYINPUTFILE, "<expressions.txt"); 
# open for input 

my(@lines) = <MYINPUTFILE>; 
#print @lines; 

my @files = grep (-f ,<*main_log>,<*Project>); 

$n = 0; 
$l = 0; 
#foreach my$file (@files) { 
foreach my $line (@lines) { 
    my @f = grep /$line/,@files; 
    print "@f\n"; 
} 
#} 
} 

問題 - 我試圖執行上面的代碼,但它不打印在我的命令提示符下任何東西。我使用Windows 7

+2

歡迎來到本網站。你有什麼嘗試? – Zaid

+0

我已經嘗試了下面的代碼,但它不給我輸出我想 – rocky

+0

#打開(MYINPUTFILE,「<表達式.txt」); #打開輸入 #my(@lines)= ; ##print @lines; #my @files = grep(-f,<*main_log>,<*Project>); #$ n = 0; #$ l = 0; #@foreach my $ file(@files){foreach my $ line(@lines) #{{0}}我的@f = grep/$ line /,@文件; #print「@f \ n」; #} ##} #} – rocky

回答

0

這個答案是根據你的發佈代碼:

use strict; # always use these 
use warnings; 

open(my $kw, '<', 'expressions.txt') or die $!; 
my @keywords = <$kw>; 
chomp(@keywords); # remove newlines at the end of keywords 

# get list of files in current directory 
my @files = grep { -f } (<*main_log>,<*Project>); 

# loop over each file to search keywords in 
foreach my $file (@files) { 
    open(my $fh, '<', $file) or die $!; 
    my @content = <$fh>; 
    close($fh); 
    my $l = 0; 
    foreach my $kw (@keywords) { 
    my $search = quotemeta($kw); # otherwise keyword is used as regex, not literally 
    foreach (@content) { # go through every line for this keyword 
     $l++; 
     printf 'Found keyword %s in file %s, line %d:%s'.$/, $kw, $file, $l, $_ 
     if /$search/; 
    } 
    } 
} 

關於在下面的意見的問題:

最內層的循環只是計數的線數$l++並拿出在發生的情況下發現 - if /$search/仍是上述說明的一部分。它也可以寫爲

if (/$search/) { 
    printf ... 
} 

printf用於格式化輸出。你也可以通過簡單的使用print來完成這個工作,並對所有需要的變量進行分析。我只是喜歡這樣。

這裏假定您想要每個文件的每個關鍵字找到的行的列表。您必須切換@keywords@content的順序和邏輯才能使其按行排序。

有關關鍵字文件中註釋的其他功能,您必須對內容進行後處理,以從註釋中辨別搜索條款。可能在搜索詞作爲鍵和評論作爲價值的散列。然後,只能使用散列鍵進行搜索(請參閱最內層循環),並將註釋(如果存在)作爲附加行添加。

+0

我在這個例子中故意使用'keyword first',因爲在這個問題中沒有給出任何偏好。如果OP希望訂購'線路號碼',他可以輕鬆採納變更。原則應該清楚。 – SREagle

+0

如果放置在如下所示的expressions.txt下,我無法搜索多個關鍵字,例如, Hello world bye ...將新行全部視爲單獨​​的關鍵字 – rocky

+0

對不起,關鍵字數組在最後仍包含換行符。修正它'chomp'ing ... – SREagle

相關問題