PERL:重复的行

PERL:重复的行,perl,Perl,我正在编写一个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 li

我正在编写一个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
#/usr/bin/perl
严格使用;
我的%prv_线;
打开(文件,“somefile”)| | die“$!”;
while(){
if($prv_行{$}){
$prv_行{$}++;
}
#我的问题:打印我看到这行X次了
}
关闭文件
我的问题:如何生成带有输出的静态消息:在不打印脚本输出的情况下打印“我看到这行X次”
谢谢

也许,以下是您想要的:

#!/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
#/usr/bin/perl
严格使用;
使用警告;
我的%行;
while(){
咀嚼;
$lines{$}++;
}
while(my($key,$value)=每%行){
打印“我看到行“$key”$value times\n”;
}
__资料__
abc
def
def
def
abc
布拉布拉
阿瓦德夫
布拉
abc

当然,它可以改进。

您的原始代码非常接近。对于
来说做得很好使用严格的
和放置
$
模具
字符串中。您还应该始终
使用警告
,使用三参数形式的
打开
,并使用词法文件句柄

这个程序应该对你有帮助

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{$_}++;
}
使用严格;
使用警告;
我的%prv_线;

打开(我的$FILE,'静态消息意味着什么?你不想自动生成代码吗?),或者在没有打印输出的情况下,要求也不是很清楚。我试图解决的问题是:查看行并打印它出现了多少次:打印“发现重复的6行”#为我的错误道歉English@Raid5您应该知道,使用哈希键进行重复数据消除只会执行词汇上精确的重复数据消除,而不会执行逻辑上的重复数据消除。例如:
if($foo){
不会被视为与
if($foo){
(不同的空格)的重复。您可能只想打印一个计数。