2013-04-15 26 views
0

行,我用的是看起來像這樣如果不是從其他列複製值一列以上

C1 C2 C3 
1  a  b 
2  c  d 
4  e  g 
4  f  h 
5  x  y 
... ... ... 

如果C1值是相同的(在這個例子中有一臺工作重複值是4的兩倍)比我想C2和C3的值在C1的第一行上粘貼4,然後我想在C1中刪除第二行和4。所以在最後它看起來應該是這樣

C1 C2 C3 
1  a  b 
2  c  d 
4  e,f g,h 
5  x  y 

我用perl腳本工作。我正在使用while循環遍歷文件。我已經使用了像我的%看到或計數在其他腳本,但我無法弄清楚如何使用它們知道。它看起來非常簡單的事情......

這是我while循環看起來像的那一刻

while (<$DATA>) { 
    @columns = split 
    $var1 = $columns[0] 
    $var2 = $columns[1] 
    $var3 = $columns[2];   
    } 

回答

2

使用哈希來控制重複。在我的例子中,我使用了哈希(%info)和密鑰C1和C2。它們中的每一個都包含一個數組引用來添加重複的項目。

use strict; 
use warnings; 

my %info =(); 
while (<DATA>) { 
    my @columns = split /\s+/; 
    if(exists $info{ $columns[0] }) { 
     push @{ $info{ $columns[0] }->{C2} }, $columns[1]; 
     push @{ $info{ $columns[0] }->{C3} }, $columns[2]; 
    } 
    else { 
     $info{ $columns[0] } = { C2 =>[ $columns[1] ], C3 => [ $columns[2]] } 
    }   
} 

foreach my $c1(sort {$a<=>$b} keys %info) { 
    print $c1, "\t", 
      join(',',@{$info{$c1}->{C2}}), "\t", 
      join(',',@{$info{$c1}->{C3}}), "\n"; 
} 


__DATA__ 
1  a  b 
2  c  d 
4  e  g 
4  f  h 
5  x  y 
相關問題