我有一个长文件说 10000 行。
那是同一组重复的数据,就像 10 行一样,接下来的 10 行将是相同的。
我想在该文件中查找说“ObjectName”字符串并计算它,该文件中出现了多少次。
任何人都可以发布详细的代码。我是 Perl 的新手。
我有一个长文件说 10000 行。
那是同一组重复的数据,就像 10 行一样,接下来的 10 行将是相同的。
我想在该文件中查找说“ObjectName”字符串并计算它,该文件中出现了多少次。
任何人都可以发布详细的代码。我是 Perl 的新手。
这是另一个选项,它也解决了您关于在整个目录中搜索的评论:
#!/usr/bin/env perl
use warnings;
use strict;
my $dir = '.';
my $count = 0;
my $find = 'ObjectName';
for my $file (<$dir/*.txt>) {
open my $fh, '<', $file or die $!;
while (<$fh>) {
$count += /\Q$find\E/g;
}
close $fh;
}
print $count;
glob
表示的将<$dir/*.txt>
非递归地获取目录中所有文本文件的名称$dir
。如果您想要所有文件,请将其更改为 <$dir/*>
. 每个文件都是open
逐行编辑和读取的。正则表达式/\Q$find\E/g
全局匹配$find
每一行的内容。该\Q ... \E
符号会转义您要查找的字符串中的任何元字符,否则这些字符可能会干扰匹配。
希望这可以帮助!
使用 Perl:
perl -ne '$x+=s/objname//g;END{print $x,"\n";}' file
更新:由于 OP 想要使用处理程序的解决方案:
#!/usr/bin/perl
use warnings;
use strict;
open my $fh , '<' , 'f.txt' or die 'Cannot open file';
my $x=0;
while (<$fh>){
chomp;
$x+=s/objname//g;
}
close $fh;
print "$x";
这可能是一个单行bash
grep "ObjectName " <filename> | wc -l