0

我有一个长文件说 10000 行。

那是同一组重复的数据,就像 10 行一样,接下来的 10 行将是相同的。

我想在该文件中查找说“ObjectName”字符串并计算它,该文件中出现了多少次。

任何人都可以发布详细的代码。我是 Perl 的新手。

4

3 回答 3

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符号会转义您要查找的字符串中的任何元字符,否则这些字符可能会干扰匹配。

希望这可以帮助!

于 2013-01-05T04:11:39.953 回答
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";
于 2013-01-04T08:57:30.407 回答
1

这可能是一个单行bash

grep "ObjectName " <filename> | wc -l
于 2013-01-04T08:53:03.740 回答