我试图从模式文件中给出的模式列表中找出与目标文件匹配的次数。以下是示例目标和模式文件:
目标文件
are
bare
barely
be
beware
care
clever
模式文件
be
are
我知道我能做到
grep -F -c -f patternFile targetFile
获取模式文件中具有一个或多个匹配项的字符串的数量,但我想计算匹配项的总数。
这里是 grep 没有返回我真正想要的内容的地方:在上面的例子中,和beware
都匹配,应该算作两次匹配,但上面的 grep 语句只将其算作一次匹配。are
be
答案1
这个小的 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