2013-10-28 3 views
7

Ich bin nur eine sehr große CSV-Datei in Teile aufteilen. Wann immer ich den folgenden Befehl ausführen. Das teilt sich nicht komplett auf, sondern gibt mir den folgenden Fehler zurück. Wie kann ich vermeiden, die ganze Datei zu teilen.wie eine große CSV-Datei in UNIX-Befehlszeile aufgeteilt werden

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

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

Antwort

15

Gerade close die Dateien nach dem Schreiben:

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

funktioniert perfekt danke – user2498657

0

Sie müssen viele Zeilen haben. Sind Sie sicher, dass die zweite Zeile genug Wiederholungen enthält, um diese Datensätze in eine einzelne Datei zu schreiben? Anyway, awk hält die Dateien bis zum Ende offen. Sie benötigen einen Prozess, mit dem die Dateizugriffsnummern geschlossen werden können, wenn sie nicht verwendet werden.

Perl zur Rettung. Nochmal.

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

Nutzung: script.pl your_monster_file.csv

gibt die gesamte Zeile in eine der gleiche wie der Wert der zweiten Spalte CSV im aktuellen Verzeichnis mit dem Namen Datei, sofern keine zitierte Felder usw.

+0

Vielen Dank für Ihre Antwort, ich benutze die zweite Spalte in der Datei. Ich werde versuchen, Ihr Perl-Skript – user2498657

+0

Gerade bemerkte ich, dass ich das ">>" auf den offenen Befehl verpasst. Würde nur die letzte Zeile ohne das bekommen. – PaulProgrammer

Verwandte Themen