2013-10-28 70 views
7

我只是將一個非常大的csv文件拆分爲多個部分。當我運行以下命令時。不完全分裂,而是返回我以下錯誤。我怎樣才能避免拆分整個文件。如何在unix命令行中拆分大型csv文件

 awk -F, '{print > $2}' test1.csv 

     awk: YY1 makes too many open files 
     input record number 31608, file test1.csv 
     source line number 1 

回答

15

只要close的文件後寫:

awk -F, '{print > $2; close($2)}' test1.csv 
+0

完美謝謝你 – user2498657

0

你必須有很多行。你確定第二行重複足夠多的記錄到一個單獨的文件?無論如何,awk將文件保持打開狀態直到結束。您需要一個可以在不使用時關閉文件句柄的進程。

Perl來拯救。再次。

#!perl  
while(<>) { 
    @content = split /,/, $_; 
    open (OUT, ">> $content[1]") or die "whoops: $!"; 
    print OUT $_; 
    close OUT; 
} 

用法:script.pl your_monster_file.csv

輸出整行到名爲一樣在當前目錄中的第二CSV列的值的文件,假設沒有引號的字段等

+0

非常感謝你的迴應,我正在使用文件的第二列。我會嘗試你的perl腳本 – user2498657

+0

只要注意到我錯過了打開命令上的「>>」。只會得到沒有的最後一行。 – PaulProgrammer