1

如果在文件中找到重复的行,我正在编写一个打印按摩/发送邮件的 perl 代码。到目前为止我的代码:

#!/usr/bin/perl 
use strict;
my %prv_line;
open(FILE, "somefile") || die "$!";
while(<FILE>){
    if($prv_line{$_}){
         $prv_line{$_}++;
     }
    #my problem: print  I saw this line X times
    }
close FILE

我的问题:如何生成带有输出的静态消息:打印“我看到这条线 X 次”而不打印脚本输出 谢谢

4

2 回答 2

2

可能,这就是你想要的:

#!/usr/bin/perl
use strict;
use warnings;

my %lines;

while(<DATA>) {
    chomp;
    $lines{$_}++; 
}

while (my($key, $value) = each %lines) {
    print "I saw the line '$key' $value times\n";
}

__DATA__
abc
def
def
def
abc
blabla

avaddv

bla
abc

当然,它可以改进。

于 2013-02-17T14:30:49.103 回答
1

您的原始代码非常接近。做得好use strict并放入字符串$!die您还应该始终use warnings使用 的三参数形式open,并使用词法文件句柄。

这个程序应该可以帮助你。

use strict;
use warnings;

my %prv_line;
open (my $FILE, '<', 'somefile') || die $!;
while (<$FILE>) {
  if ( $prv_line{$_} ) {
    print "I saw this line $prv_line{$_} times\n";
  }
  $prv_line{$_}++;
}
于 2013-02-17T15:25:36.027 回答