2013-10-28 21 views
7

Sadece parçalara çok büyük bir csv dosyası ayırıyorum. Ne zaman aşağıdaki komutu çalıştırıyorum. Tamamen bölünmez, bana aşağıdaki hatayı verir. Bütün dosyayı bölmekten nasıl kurtulabilirim.unix komut satırında büyük bir csv dosyasının nasıl bölüneceği

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

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

cevap

15

Sadece close varsayarak geçerli dizinde ikinci CSV sütunun değeri ile aynı isimli bir dosya içine tüm çizgi verir dosyaları yazdıktan sonra:

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

mükemmel çalışıyor teşekkürler – user2498657

0

Çok fazla satırınız olmalı. İkinci sıranın bu kayıtları tek bir dosyaya koymaya yetecek kadar tekrarlandığından emin misiniz? Her neyse, awk dosyaları sonuna kadar açık tutuyor. Kullanılmadığı zaman dosya tutamaçlarını kapatabilen bir işleme ihtiyacınız olacak.

Kurtarma için Perl. Tekrar.

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

kullanımı: script.pl your_monster_file.csv

vb hiçbir tırnak işaretli alanları

+0

Yanıtınız için çok teşekkür ederim, dosyadaki ikinci sütunu kullanıyorum. Perl betiğini deneyeceğim – user2498657

+0

Sadece açık komutta ">>" yi kaçırdığımı fark ettim. Sadece son çizgiyi bu olmadan alırdım. – PaulProgrammer

İlgili konular