대용량 파일을 열별로 분할하고 헤더의 값을 파일 이름으로 사용

대용량 파일을 열별로 분할하고 헤더의 값을 파일 이름으로 사용

헤더와 데이터가 포함된 탭으로 구분된 큰 텍스트 파일이 있습니다. 파일을 열별로 더 작은 파일로 분할하고 헤더를 제외하고 파일 이름을 열 이름으로 지정하고 싶습니다.

pos    red    green    blue
123    0|0    1|0      0|0
321    1|0    1|0      0|0
231    0|0    0|0      0|0
213    0|0    1|0      1|0

파일을 다음과 같이 분할해야 합니다.

pos.txt:
123
321
231
213

red.txt:
0|0
1|0
0|0
0|0

green.txt:
1|0
1|0
0|0
1|0

blue.txt:
0|0
0|0
0|0
1|0

나는 시도했다:

awk 'NR==1{h=$0; next}
!seen[$3]++{f=${h[$3]}".txt"; print >> f}' infile

하지만 결코 효과가 없었습니다 ...

답변1

다음을 시도해 볼 수 있습니다.

awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i; next}
{for (i=1;i<=NF;i++) {print $i > a[i]".txt"}}' infile

헤더 행에서는 각 필드의 값을 배열에 저장한 다음 나머지 행에 대해 각 필드를 해당 파일 이름으로 인쇄합니다.

관련 정보