как разделить большой csv-файл в командной строке unix

Я просто разделяю очень большой csv-файл на части. Когда я запускаю следующую команду. не полностью разделяется, а возвращает мне следующую ошибку. как я могу избежать разделения всего файла.

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

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

2 ответов


просто close файлы после записи:

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

у вас должно быть много строк. Вы уверены, что вторая строка повторяется достаточно, чтобы поместить эти записи в отдельный файл? В любом случае, awk держит файлы открытыми до конца. Вам понадобится процесс, который может закрыть дескрипторы файлов, когда они не используются.

Perl на помощь. Снова.

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

использование: script.pl your_monster_file.csv

выводит всю строку в файл с именем, совпадающим со значением второго столбца CSV в текущем каталоге, предполагая, что нет цитирует поля и т. д.