아래와 같은 파일(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)와 동일한 값을 갖습니다.NR
FNR
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