2012-01-11 59 views
0

拆分CSV我有以下记录了大量的CSV文件:Linux的 - 根据条件

60,1572236,3,58394247,\N,\N,\N,1925720,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
61,2875109,4,58394209,1234,\N,4025175,\N,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
62,2875109,4,58394209,\N,\N,\N,9860904,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
63,2875109,5,58394209,8756,\N,\N,8615157,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
64,2686696,3,58394211,\N,\N,59512,\N,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
65,2686696,3,58394211,\N,\N,4025893,\N,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 

我希望将文件分成2个文件中,拆分的条件将在5日的价值列中,一个文件将获得该列中没有值的行(\ N),并且该列中具有值的列将转到另一个文件。

在上面的示例中:行2,4将转到一个文件,其余行将转到另一个文件。

任何想法如何在Linux中做到这一点?

+0

我知道这并不回答您关于使用Linux命令的问题。但是,如果你有时间研究它,我建议你看看R.你可以将CSV文件导入为数据框。然后,根据您定义的任何规则(它们就像程序设计语言中的条件表达式),您可以从原始数据框生成其他数据框。然后,您可以将它们导出为CSV文件。 – dgraziotin 2012-01-11 12:44:07

+0

您可以使用'grep'通过正则表达式匹配第一个条件,然后'cut -d,-f2,4'将第二个和第四个列提取到一个新文件。 – 2012-01-11 12:47:01

+0

我的文件有超过70M行,我只是添加了一个视图行,所以你可以看到数据是怎样的,我不知道哪些行有/没有值 – Ran 2012-01-11 12:52:39

回答

0

您可以使用awk

$ awk -F, '$5=="\\N"{print >"file1.csv"; next}; {print >"file2.csv"}' data.csv 
  • file1.csv将包含\N
  • file2.csv将包含其他