2013-02-17 34 views
1

我正在寫一個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 line X times 
    } 
close FILE 

我的問題:如何生成與輸出靜態信息:打印「我看到這行X次」不打印腳本輸出 感謝

+0

靜態味精是什麼意思?你不想自動生成代碼?, 或也沒有打印輸出,要求不是很清楚。 – 2013-02-17 14:22:28

+0

我試圖解決的問題:coutn行和打印出現多少次:打印「6行發現重複」#對不起,我的英語 – Raid5 2013-02-17 14:25:17

+0

@ Raid5你應該知道,用哈希鍵進行重複數據刪除只會執行詞法準確的重複數據刪除,不是合理的重複數據刪除。例如:'if($ foo){'不會被認爲是if($ foo){'(不同的空格)的重複。 – TLP 2013-02-17 14:29:24

回答

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{$_}++; 
} 
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 

當然,它可以改進。

+0

您可能只想打印一個計數。 – TLP 2013-02-17 14:31:58

+0

是的工作感謝 – Raid5 2013-02-17 14:38:09

+0

我稍微更新了我的答案。 – varnie 2013-02-17 14:39:44