我正在处理的输入如下。
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程序,但是我无法得到正确的输出。
答案 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";
}