如果列的第一个元素相同,如何在行中打印第二列元素,用逗号(,)分隔

时间:2014-12-12 06:21:46

标签: perl

我正在处理的输入如下。

Q9NRG9 15
Q9NRG9 160
Q9NRG9 56
Q9NRG9 89
Q16613 26
Q16613 63
Q16613 102
O95477 19
O95477 91
O95477 78
O95477 86
O95477 16
O95477 203
O95477 66
P78363 18
P78363 159
P78363 88

我希望输出为

Q9NRG9 15,160,56,89
Q16613 26,63,102
O95477 78,86,16,203,66

我尝试过使用perl程序,但是我无法得到正确的输出。

2 个答案:

答案 0 :(得分:1)

从命令行使用perl

perl -lane '
    push @{ $h{$F[0]} }, $F[1] 
}{ 
    $" = ","; 
    print "$_ @{ $h{$_} }" for keys %h
' file
O95477 19,91,78,86,16,203,66
Q9NRG9 15,160,56,89
P78363 18,159,88
Q16613 26,63,102

要维持订单,您可以:

perl -lane '
    $k{$F[0]}++ or push @r, $F[0];
    push @{ $h{$F[0]} }, $F[1] 
}{ 
    $" = ","; 
    print "$_ @{ $h{$_} }" for @r
' file

答案 1 :(得分:0)

试试这个:

open (FILE, "text.txt") or die  "cannot open file".$!;

my %data;
while(<FILE>){
        chomp($_);
        my ($key, $value) = split(/\s+/,$_);
        push(@{$data{$key}}, $value);
}
foreach (keys %data){
   print $_."  ".join(",",@{$data{$_}})."\n";
}