Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如果列的第一个元素相同,如何打印以逗号(,)分隔的行中的第二列元素_Perl - Fatal编程技术网

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

Perl 如果列的第一个元素相同,如何打印以逗号(,)分隔的行中的第二列元素,perl,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,

我正在处理的输入如下

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程序,但无法获得所需的正确输出

试试这个:

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";
}
open(文件“text.txt”)或die“无法打开文件”。$!;
我的%数据;
while(){
咀嚼(美元);
my($key,$value)=拆分(/\s+/,$);
push(@{$data{$key}},$value);
}
foreach(键%data){
打印$。“.join(“,”,@{$data{$})。“\n”;
}

从命令行使用
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

展示你的尝试。