我试图找到从模式文件中给出的模式列表到目标文件的匹配发生次数。以下是示例目标文件和特征码文件:
目标文件
are
bare
barely
be
beware
care
clever
图案文件
be
are
我知道我能做
grep -F -c -f patternFile targetFile
以获得在其中的模式文件中具有一个或多个匹配项的字符串的数量,但是我想计算匹配项的总数。
这是grep没有返回我真正想要的东西的地方:在上面的示例中,beware
两者都匹配are
,be
并且应该算作两个匹配项,但是上面的grep语句仅将其算作一个匹配项。
这个小的Perl脚本不是单行代码,它可以完成此工作:
代码:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
# check for 2 files given as argument
my $f1 = shift @ARGV or die "missing file 1";
my $f2 = shift @ARGV or die "missing file 2";
# load all words to search
open my $fh1, '<', 'file1.txt' or die "$!";
my @wrd = <$fh1>;
chomp @wrd;
# loop on the fiile to be searched
open my $fh2, '<', 'file2.txt' or die "$!";
my $count;
while(my $line = <$fh2>) {
$count += $line =~ /$_/ for @wrd;
}
say "$count occurrence of ", join' or ',@wrd;
档案:
cat file1.txt
be
are
cat file2.txt
are
bare
barely
be
beware
care
clever
用法:
./test.pl file1.txt file2.txt
7 occurrence of be or are
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句