"awk"를 사용한 열 이름 기반 파일 분할이 실패함

"awk"를 사용한 열 이름 기반 파일 분할이 실패함

나는 시도했다:

  1. awk '{if (last != $1) close(last); print > $1; last = $1}' file

  2. awk -F$'\t' '{ print > ($1) }' file

  3. awk '{if (last != $1) close(last); print >> $1; last = $1}' file

매우 큰 텍스트 파일(33GB)을 첫 번째 열의 이름이 지정된 여러 파일로 분할합니다.

작은 파일의 경우 모든 것이 잘 작동하지만 큰 파일의 경우 awk열 유형(명령 1 및 2)의 끝 부분에서 중지되거나 "."이 포함된 열에 줄 바꿈 문자를 입력하는 것을 잊어버립니다. 그 안에 (명령 3).

예: "10" 유형의 열의 실제 끝에 도달하기 전에 중지됩니다.

10      69331427        1
10      69331428        1
10      69331429        1
10      69331430        1
10      69331431        1
10                 

편집: 파일을 닫으면 도움이 되는 것 같습니다. '{print >> $1; close($1)}'

GNU Awk 4.1.4, API: 1.1(GNU MPFR 4.0.1, GNU MP 6.1.2)

답변1

"매우 큰 텍스트 파일(33GB)을 첫 번째 열로 명명된 여러 파일로 분할합니다." 모든 UNIX 시스템에서 GNU awk를 사용하는 방법은 다음과 같습니다.

awk '{print > $1}' file

그게 다야. 문제가 발생하는 경우 awk 명령이 아닌 다른 원인으로 인해 발생할 수 있습니다. 예를 들어 드라이브에 공간이 부족하거나 입력 파일에 이상한 제어 문자가 포함되어 있을 수 있습니다.

awk stops near the end of column type나는 당신이 무슨 말을 하는지 모르겠고 forgets to input newline characters for columns that have "." in them, 그렇지도 않습니다 it just stops before reaching real end of column of type "10". 이는 부분적으로 "열 유형"이 귀하에게 의미하는 바를 나타내는 질문이 없기 때문일 수 있습니다.

관련 정보