2012-01-11 58 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將包含其他