여러 열 헤더를 기반으로 CSV 파일을 여러 CSV 파일로 분할

여러 열 헤더를 기반으로 CSV 파일을 여러 CSV 파일로 분할

헤더의 특정 열을 기반으로 여러 csv 파일로 분할하려는 큰 csv 파일이 있습니다. 목표는 국가 열과 관련된 모든 파일을 생성하는 것입니다.

예를 들어:

-->input file: file.csv
,,fr,fr,fr,ca,ca,ca,be,be,be
id,dateContact,name,date1,date2,name,date1,date2,name,date1,date2
100,2019-03-19,AA,2019-03-20,2019-03-22,AAA,2019-02-19,2019-02-22,AAAA,2019-02-19,2019-02-22
101,2019-08-15,BB,2019-08-16,2019-08-17,BBB,2019-07-16,2019-07-17,BBBB,2019-07-16,2019-07-17
102,2020-01-19,CC,2020-01-21,2020-01-21,CCC,2020-01-21,2020-01-21,CCCC,2020-01-21,2020-01-21

-필수 출력 파일:

-->output_fr.csv:        
id,dateContact,name,date1,date2      
100,2019-03-19 ,AA  ,2019-03-20,2019-03-22 
101,2019-08-15 ,BB  ,2019-08-16,2019-08-17 
102,2020-01-19 ,CC  ,2020-01-21,2020-01-21 

-->output_ca.csv:       
id,dateContact,name,date1,date2     
100,2019-03-19 ,AAA ,2019-02-19,2019-02-22
101,2019-08-15 ,BBB ,2019-07-16,2019-07-17
102,2020-01-19 ,CCC ,2020-01-21,2020-01-21

-->output_be.csv:      
id,dateContact,name,date1,date2   
100,2019-03-19,AAAA,2019-02-19,2019-02-22
101,2019-08-15,BBBB,2019-07-16,2019-07-17
102,2020-01-19,CCCC,2020-01-21,2020-01-21

다음 awk 스크립트 설명을 사용하여 여기:

awk 'BEGIN { FS="," ; OFS=","}

          { for (i=3; i<=NF;i++){
          if (NR==1) { file[i]=$i }
          if (NR!=1) { f="output_" file[i]   ".csv";
                       g="output_" file[i+1] ".csv";
                       printf("%s%s",$i,f==g?OFS:ORS)>>f;
                      close(f);
                      }
         }
      }' file.csv

국가 열은 검색할 수 있지만 빈 열(id 및 dateContact)은 검색할 수 없습니다. 출력 파일은 다음과 같습니다

-->output_fr.csv:
name,date1,date2
AA,2019-03-20,2019-03-22
BB,2019-08-16,2019-08-17
CC,2020-01-21,2020-01-21

-->output_ca.csv:
name,date1,date2
AAA,2019-02-19,2019-02-22
BBB,2019-07-16,2019-07-17
CCC,2020-01-21,2020-01-21

-->output_be.csv:
name,date1,date2
AAAA,2019-02-19,2019-02-22
BBBB,2019-07-16,2019-07-17
CCCC,2020-01-21,2020-01-21

awk를 사용하여 이 작업을 어떻게 수행할 수 있나요? 감사해요.

관련 정보