Skip to main content
 首页 » 编程设计

shell之根据命令行中的列拆分 csv 文件

2025年12月25日38linjiqin

我在文件中有一些数据,格式为 csv 格式:

ID,DATE,EARNING 
1,12 May 2018,5 
1,13 May 2018,15 
2,12 May 2018,25 

我想把它分成多个文件,这样 file_1_May_report 包含:

ID,DATE,EARNING 
1,12 May 2018,5 
1,13 May 2018,15 

另一个文件 file_2_May_report 包含:

ID,DATE,EARNING 
2,12 May 2018,25 

我试过了:

awk -F, '{print >> $1}' input.csv  

但是我只得到一个文件 1 只有一条记录,即输入文件中的最后一条记录。如何根据 ID 将其拆分为多个文件?

请您参考如下方法:

你可以使用这个awk:

awk -F, 'NR==1{hdr=$0; next} !seen[$1]++{fn="file_" $1 "_May_report"; print hdr > fn} {print > fn}' input.csv 

或者更易读的格式:

awk -F, 'NR == 1 { 
   hdr = $0 
   next 
} 
!seen[$1]++ { 
   fn = "file_" $1 "_May_report" 
   print hdr > fn 
} 
{ 
   print > fn 
}' input.csv