특정 열의 값을 기준으로 파일 분할

특정 열의 값을 기준으로 파일 분할

첫 번째 열에 uniq 값이 있는 여러 파일로 분할하려는 파일이 있습니다. 예를 들어 다음은 파일입니다.

파일A.txt

1    Cat
1    Dog
1    Frog
2    Boy
2    Girl
3    Tree
3    Leaf
3    Branch
3    Trunk

내 출력이 다음과 같기를 원합니다.

파일 1.txt

1    Cat
2    Boy
3    Tree

파일 2.txt

1    Dog
2    Girl
3    Leaf

파일 3.txt

1    Frog
3    Branch

파일 4.txt

3    Trunk

값이 존재하지 않으면 건너뛰기를 원합니다. 나와 비슷한 상황을 찾아보았으나 아무 것도 발견되지 않았습니다. 이 작업을 수행하는 방법을 아는 사람이 있나요?

편집하다:내 awk 버전은 다음과 같습니다.awk version 20070501

답변1

$ gawk '{print > "file" ++a[$1] ".txt"}' input

# And on OSX awk, and also gawk:

$ awk '{print > ("file" ++a[$1] ".txt")}' input


$ head file*txt
==> file1.txt <==
1    Cat
2    Boy
3    Tree

==> file2.txt <==
1    Dog
2    Girl
3    Leaf

==> file3.txt <==
1    Frog
3    Branch

==> file4.txt <==
3    Trunk

편집하다: 설명. 그러면 현재 줄이 ( >) 에 인쇄됩니다 fileX.txt. 첫 번째 필드가 발견될 때마다 배열은 a[$1]평가되기 전에 1씩 증가됩니다. 이는 파일 이름을 설정하는 데 사용됩니다.

편집 2:OSX awk로는 확인할 수 없었지만 awk 사용에 대해 너무 심각하지 않다면 설치해 gawk도 괜찮을 것 같습니다 mawk. 그러나 다음을 시도해 볼 수 있습니다.

$ awk '{a[$1]++; f = "file" a[$1] ".txt"; print > f}' input

동일한 작업을 수행하지만 모든 것이 별도의 단계로 구분됩니다. 이는 OSX가 다양한 부분을 평가하는 올바른 순서를 이해하는 데 도움이 됩니다.

관련 정보