첫 번째 열의 값을 기준으로 단어를 그룹화합니다.

첫 번째 열의 값을 기준으로 단어를 그룹화합니다.

첫 번째 열의 값을 기준으로 모든 파일 내용을 그룹화하고 싶습니다. 출력이 정렬된 형식이면 더 좋을 것입니다.

입력하다:

1 foo
2 bar
1 foobar
2 barbar
3 apple
4 banana
3 mango
5 orange

예상 출력:

1 foo, foobar
2 bar, barbar
3 apple, mango
4 banana
5 orange

답변1

내가 올바르게 이해했다면 당신은 찾고 있습니다

perl -lane 'push @{$k{$F[0]}},$F[1]; 
            END{$"=", ";print "$_ @{$k{$_}}" for sort keys(%k)}' file

명시적으로 라인을 분할할 이유가 없습니다. 플래그 -a가 이를 수행합니다. 각 입력 행을 @F배열로 분할합니다. 따라서 여기서는 %k키가 첫 번째 필드이고 값이 두 번째 필드의 해당 목록인 해시를 만듭니다 . 그런 다음 마지막으로 해시 키를 정렬하고 $"목록 구분 기호( )를 설정한 다음 ,[space]각 키와 해당 값 목록을 인쇄합니다.

답변2

다른 perl:

$ perl -anle '
    push @{$h{$F[0]}}, $F[1];
    END {
        for (sort {$a <=> $b} keys %h) {
            print "$_ ", join(", ", @{$h{$_}});
        }
    }
' file
1 foo, foobar
2 bar, barbar
3 apple, mango
4 banana
5 orange

설명하다

  • $h키가 값인 해시를 만듭니다 $F[0]. 각 해시 값은 배열 참조입니다. 각 행이 처리될 때 두 번째 필드의 값을 $F[1]배열 참조에 추가합니다 push @{$h{$F[0]}}, $F[1].

  • $h모든 행을 처리한 후 키( )를 정렬하고 sort {$a <=> $b} keys %h각 배열 참조를 문자열( join(", ", @{$h{$_}}))에 연결하고 연결된 문자열에 해당하는 각 키를 인쇄합니다.

관련 정보