2014-12-12 3 views
-2

입력 내용은 다음과 같습니다.열의 첫 번째 요소가 동일한 경우 행의 두 번째 열 요소를 쉼표 (,)로 구분하여 인쇄하는 방법

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 

으로 원하는,하지만 난 내가 원하는 정확한 출력을 얻을 수 없었다.

+5

쇼. – Jens

답변

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"; 
} 
+0

@Downvoter : 당신의 downvote에 대해 설명해주십시오. – Jens

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 
관련 문제