2017-01-30 42 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

相关问题