2017-08-04 41 views
0

我有一個文件(說bugs.txt),它是通過運行一些代碼生成的。這個文件有JIRAS列表。我想寫一個代碼,可以從該文件中刪除重複的條目。perl代碼刪除文件中的重複條目

邏輯應該是通用的,因爲bugs.txt文件每次都會有所不同。

樣本輸入文件bugs.txt

BUG-111, BUG-122, BUG-123, BUG-111, BUG-123, JIRA-221, JIRA-234, JIRA-221 

輸出樣本:

BUG-111, BUG-122, BUG-123, JIRA-221, JIRA-234 

我試代碼:

my $file1="/path/to/file/bugs.txt"; 
my $Jira_nums; 
open(FH, '<', $file1) or die $!; 
    { 
    local $/; 
    $Jira_nums = <FH>; 
    } 
close FH; 

我需要幫助在去除重複項設計邏輯文件bugs.txt

+0

https://stackoverflow.com/questions/5884401/perl-find-duplicate-lines-in-file-or-array – AbhiNickz

+0

的可能的複製它是一個一行文件?如果沒有,你是否想要刪除存在於不同行上的dups? – Toto

+0

是@Toto,這可能是單行或多行文件。想法是從整個文件中刪除重複的條目。 – Yash

回答

1

你只需要幾行加到你的腳本:

my %seen; 
my @no_dups = grep{!$seen{$_}++}split/,?\s/,$Jira_nums; 

您將獲得:

use strict; 
use warnings; 
use Data::Dumper; 

my $file1="/path/to/file/bugs.txt"; 
my $Jira_nums; 
open(my $FH, '<', $file1) or die $!; # use lexical file handler 
    { 
    local $/; 
    $Jira_nums = <$FH>; 
    } 
my %seen; 
my @no_dups = grep{!$seen{$_}++}split/,?\s/,$Jira_nums; 
say Dumper \@no_dups; 

對於輸入數據,如:

BUG-111, BUG-122, BUG-123, BUG-111, BUG-123, JIRA-221, JIRA-234, JIRA-221 
BUG-111, BUG-122, BUG-123, BUG-111, BUG-123, JIRA-221, JIRA-234, JIRA-221 
BUG-111, BUG-122, BUG-123, BUG-111, BUG-123, JIRA-221, JIRA-234, JIRA-221 
BUG-111, BUG-122, BUG-123, BUG-111, BUG-123, JIRA-221, JIRA-234, JIRA-221 

它給:

$VAR1 = [ 
      'BUG-111', 
      'BUG-122', 
      'BUG-123', 
      'JIRA-221', 
      'JIRA-234' 
     ]; 
+0

感謝@Toto,提出了一個班輪解決方案爲我工作。 – Yash

0

你可以試試這個:

use strict; 
use warnings; 

my @bugs = ""; 
@bugs = split /\,?(\s+)/, $_ while(<DATA>); 
my @Sequenced = map {$_=~s/\s*//g; $_} RemoveDup(@bugs); 

print "@Sequenced\n"; 

sub RemoveDup {  my %checked; grep !$checked{$_}++, @_; } 


__DATA__ 
BUG-111, BUG-122, BUG-123, BUG-111, BUG-123, JIRA-221, JIRA-234, JIRA-221