2015-02-10 77 views
-1

我有一個數據集爲了從數組中刪除重複的元素在Perl

10-101570715-101609901-hsa-mir-3158-1 10-101600739-101609661-ENSG00000166171 10-101588288-101609668-ENSG00000166171 10-101588325-101609447-ENSG00000166171 10-101594702-101609439-ENSG00000166171 10-101570560-101596651-ENSG00000166171 

10-103389007-103396515-hsa-mir-1307 10-103389041-103396023-ENSG00000173915 10-103389050-103396074-ENSG00000173915 10-103389050-103396441-ENSG00000173915 10-103389050-103396466-ENSG00000173915 10-103389050-103396466-ENSG00000173915 

除了在每一行的第一個元素,我有多個值,這是多餘的,我想刪除冗餘值。我寫了一個代碼,但我覺得它的工作不錯。

open (fh, "file1"); 
while ($line=<fh>) 
{ 
chomp ($line); 
@array=$line; 
my @unique =(); 
my %Seen =(); 
foreach my $elem (@array) 
    { 
    next if $Seen{ $elem }++; 
    push @unique, $elem; 
    } 
print @unique; 
} 
+1

'使用嚴格的;使用警告;使用Data :: Dumper;打印Dumper \%看到;'你不是在尋找重複使用全行? – 2015-02-10 06:14:22

+0

不,使用實線不重複,只搜索元素,重複在一行 – 2015-02-10 06:22:56

回答

5

哈希是重複檢測:

my %seen; 
my @removeduplicate = grep { !$seen{$_}++ } @array; 

對我來說,下面的代碼工作正常:

use strict; 
use warnings; 

my %seen; 
open my $fh, "<", 'file.txt' or die "couldn't open : $!"; 
while (my $line = <$fh>) 
{ 
    chomp $line; 
    my @array = split (' ', $line); 
    my @removeduplicate = grep { !$seen{$_}++ } @array; 
    print "@removeduplicate\n"; 
} 
+0

冗餘值仍然存在 – 2015-02-10 06:20:47

+1

@MANAUWERRAZA:看看我編輯的答案。總是使用'使用警告'和'使用嚴格'和三個參數來進行文件操作。 – serenesat 2015-02-10 06:43:59

+0

謝謝,之前編寫的代碼也工作過,這是我的疏忽大部分。 – 2015-02-10 07:24:28