我有一个长文件说10000行。
这是同一组数据重复,如10行,接下来的10行将是相同的。
我想在该文件中查找“ObjectName”字符串并对其进行计数,该文件中出现了多少次。
任何人都可以发布详细的代码。我是Perl的新手。
答案 0 :(得分:2)
使用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";
答案 1 :(得分:2)
这是另一个选项,它也解决了您在整个目录中搜索的评论:
#!/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
表示法会转义您要查找的字符串中的任何元字符,否则这些字符可能会干扰匹配。
希望这有帮助!
答案 2 :(得分:0)
这可能是bash
grep "ObjectName " <filename> | wc -l