在文件中查找特定字符串并计算使用perl重复的次数

时间:2013-01-04 08:50:04

标签: perl

我有一个长文件说10000行。

这是同一组数据重复,如10行,接下来的10行将是相同的。

我想在该文件中查找“ObjectName”字符串并对其进行计数,该文件中出现了多少次。

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

3 个答案:

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