2013-03-15 265 views
2

我有一個CSV文件,需要按日期進行拆分。我試過使用下面列出的AWK代碼(找到elsewhere)。使用awk按列分割CSV文件

awk -F"," 'NR>1 {print $0 >> ($1 ".csv"); close($1 ".csv")}' file.csv

我已經試過在OS X和Debian的終端中運行此。在這兩種情況下都沒有錯誤消息(所以代碼似乎正常運行),但也沒有輸出。沒有輸出文件,並且在命令行中沒有響應。

我的輸入文件有〜6K行的數據,看起來像這樣:

date,source,count,cost 
2013-01-01,by,36,0 
2013-01-01,by,42,1.37 
2013-01-02,by,7,0.12 
2013-01-03,by,11,4.62 

包含特定日期的所有行要創建什麼,我想是一個新的CSV文件。我忽略了什麼?

+0

當你的方式「沒有迴應」;你還等多久? – 2013-03-15 19:33:22

+0

它運行時間不到一秒(提示返回)。我已經觀看了文件夾幾分鐘,看是否有任何東西填充,但沒有。我也搜索了我的系統,看看這些文件是否在其他地方創建,但沒有運氣。 – Lenwood 2013-03-15 19:39:05

+0

已解決。這是我的線路結局。在[this thread](http://stackoverflow.com/a/2652526/297780)的領導之後,我使用'file data.csv'命令來檢查文件格式。我有Mac樣式行結束,所以我使用文本牧馬人來改變格式,現在上面的代碼按預期工作。 – Lenwood 2013-03-15 19:51:55

回答

2

我解決了這個問題。按照this thread的邏輯,我使用file命令檢查了我的行尾,並獲知該文件具有舊式Mac行終止符。我用Text Wrangler打開了我的輸入CSV文件,並使用Unix樣式行結束符再次保存它。一旦我這樣做,上面列出的awk命令按預期工作。大約需要5秒鐘才能創建63個按日期分列的新CSV文件。

+2

+1自己解決它 – 2013-03-15 20:09:55

+0

張貼的命令將產生輸出,但它可能過長而且效率低下。該腳本將在每行之後關閉輸入文件,然後在下一個匹配行重新打開它。這可能是因爲儘可能少的輸出文件可以同時打開,但使用gawk這樣的現代awk並不是問題。你應該可以這樣做:'awk -F,'NR> 1 {print>($ 1「.csv」)}'file.csv' – 2013-03-16 02:52:31