Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 基于命令行中的列拆分csv文件_Shell_Awk_Command Line_Scripting - Fatal编程技术网

Shell 基于命令行中的列拆分csv文件

Shell 基于命令行中的列拆分csv文件,shell,awk,command-line,scripting,Shell,Awk,Command Line,Scripting,我在文件中有一些数据,格式为csv: ID,DATE,EARNING 1,12 May 2018,5 1,13 May 2018,15 2,12 May 2018,25 我想将其拆分为多个文件,以便文件\u 1\u可能\u报告包含: ID,DATE,EARNING 1,12 May 2018,5 1,13 May 2018,15 ID,DATE,EARNING 2,12 May 2018,25 以及另一个包含以下内容的文件\u 2\u可能\u报告: ID,DATE,EARNING 1,12

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

ID,DATE,EARNING
1,12 May 2018,5
1,13 May 2018,15
2,12 May 2018,25
我想将其拆分为多个文件,以便文件\u 1\u可能\u报告包含:

ID,DATE,EARNING
1,12 May 2018,5
1,13 May 2018,15
ID,DATE,EARNING
2,12 May 2018,25
以及另一个包含以下内容的文件\u 2\u可能\u报告:

ID,DATE,EARNING
1,12 May 2018,5
1,13 May 2018,15
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

在发布之前,我已经正确地测试了这个awk。你能澄清一下什么不起作用吗?它不会创建任何文件,但它起作用了。问题是我的文件有错误的行终止符。必须运行tr“^M”\n“unix-input.csv”