쉘 명령을 사용하여 파일을 여러 파일로 분할

쉘 명령을 사용하여 파일을 여러 파일로 분할

내 파일을 여러 파일로 분할하고 싶습니다.

아래는 제가 가지고 있는 파일입니다.

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

파일을 다음 부분으로 분할하고 싶습니다

파일 1

sort a # 3|4
sort a # 2|5

파일 2

sort b # 1|2
sort b # 2|5

보시다시피 두 번째 열을 기준으로 나누었습니다. 두 번째 열에는 다양한 값이 있으므로 파일을 나누는 데 시간이 많이 걸립니다. 이 문제를 해결하는 방법은 무엇입니까?

답변1

AWK해결책:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++- 고유한 두 번째 필드 값이 발견되었는지 확인하고 $2이를 배열에 대한 인덱스로 사용합니다 a. 고유한 값이 처음 나타나는 경우에만 !a[$2]++조건을 평가합니다 .true$2
  • fn="file"++c- 생성하다파일 이름접미사가 증가하면서++c

결과 보기:

$ head file[12]
==> file1 <==
sort a # 3|4
sort a # 2|5

==> file2 <==
sort b # 1|2
sort b # 2|5

답변2

split -l 2 test

그러면 2개의 분할 파일이 생성됩니다. 분할 파일의 출력:

$ cat xaa
sort a # 3|4
sort a # 2|5
$ cat xab
sort b # 1|2
sort b # 2|5

관련 정보