![根据多个列标题将 csv 文件拆分为多个 csv 文件](https://linux22.com/image/177814/%E6%A0%B9%E6%8D%AE%E5%A4%9A%E4%B8%AA%E5%88%97%E6%A0%87%E9%A2%98%E5%B0%86%20csv%20%E6%96%87%E4%BB%B6%E6%8B%86%E5%88%86%E4%B8%BA%E5%A4%9A%E4%B8%AA%20csv%20%E6%96%87%E4%BB%B6.png)
我有一个大的 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 来做到这一点?谢谢。