如何使用 Grep 查找从一个文件到另一个文件的匹配数

如何使用 Grep 查找从一个文件到另一个文件的匹配数

我试图从模式文件中给出的模式列表中找出与目标文件匹配的次数。以下是示例目标和模式文件:

目标文件

are
bare
barely
be
beware
care
clever

模式文件

be
are

我知道我能做到

grep -F -c -f patternFile targetFile

获取模式文件中具有一个或多个匹配项的字符串的数量,但我想计算匹配项的总数。

这里是 grep 没有返回我真正想要的内容的地方:在上面的例子中,和beware都匹配,应该算作两次匹配,但上面的 grep 语句只将其算作一次匹配。arebe

答案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

相关内容