첫 번째 열에 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가 다양한 부분을 평가하는 올바른 순서를 이해하는 데 도움이 됩니다.