awk에서 여러 출력의 형식 출력 파일 이름을 설정하는 방법

awk에서 여러 출력의 형식 출력 파일 이름을 설정하는 방법

아래와 같은 파일(file.csv)이 있습니다.

abc 123
abc 001
abc 014
bos 011
bos 034
bos 079
bos 004
...

추신: file.csv의 열 1에는 총 27297개의 고유 단어가 있고 file.csv에는 총 789234개의 행이 있습니다.

첫 번째 열을 기준으로 여러 파일로 분할하고 싶습니다. 나는 그것을 처리하기 위해 awk를 사용합니다.

awk '{x=++i}{print $2 > "HG"x".txt"}' file.csv

그러나 출력 이름은 HG1.txt, HG2.txt,..., HG27297.txt. 내가 원하는 것은 출력 파일 이름의 형식이 지정되어야 하고 HG000001.txt, HG000002.txt,..., HG027297.txt.

답변1

{x=++i}2개의 변수 sum을 생성하며 x둘 다 i내장 변수 (and)와 동일한 값을 갖습니다.NRFNR

print $2 > "HG"x".txt"오른쪽 표현식 주위에 괄호가 없기 때문에 정의되지 않은 동작입니다 >.

GNU awk를 제외한 모든 것을 사용할 때 출력 파일을 닫지 않으면 임계값을 초과한 후 "열린 파일이 너무 많습니다" 오류가 발생합니다.

예제에 표시된 대로 입력이 첫 번째 필드 값으로 그룹화되어 있다고 가정합니다(그렇지 않은 경우 sort먼저 입력에서 실행).

awk '$1!=prev{close(out); out=sprintf("HG%06d.txt",++c); prev=$1} {print > out}' file.csv

코드에서처럼 두 번째 열만 인쇄하려면 분명히 print > out.print $2 > out

관련 정보