Как добавить несколько файлов в один файл в целом, используя Perl? - PullRequest
1 голос
/ 05 апреля 2019

В моей системе Unix есть несколько чанков. Скажем так (file1.csv, file2.csv ..., file10.csv). Я хотел добавить все эти файлы в том же порядке, не читая их построчно.

open(my $fh, '<:encoding(UTF-8)', $filename)
  or die "Could not open file '$filename' $!";

while (my $row = <$fh>) {
  chomp $row;
  print "$row\n";
}

Приведенный выше пример кода читает файл строка за строкой. Но у файлов чанка огромные данные. Поэтому я не могу читать их построчно и не могу хранить их в строке, используя Stringify().

Я ищу что-то в Perl, похожее на приведенную ниже команду оболочки.

cat file1.csv >> file.csv

Пожалуйста, дайте мне знать, что я могу сделать аналогичную копию (добавить в конец целевого файла) в Perl. Спасибо!

1 Ответ

2 голосов
/ 05 апреля 2019

Как упоминалось выше Шоном, вы можете read блок за раз. Вы можете поэкспериментировать с различными размерами блоков, чтобы увидеть, что является самым быстрым в вашей системе. Например:

my $BLOCK_SIZE = 1024 * 1024 * 2;    # try reading 2 megabytes at a time
my $outfile = "output.csv";
open(OUT, ">>", $outfile) or die "Can't append to output file $outfile: $!\n";
foreach my $input_file (@input_files) {
     open(IN, "<", $input_file) or die "Can't read from input file $input_file: $!\n";
     my $data;
     my $blocks_read = 0;
     while (read(IN, $data, $BLOCK_SIZE)) {
         print OUT $data;
         $blocks_read++;
     }
     close IN;
     print "Read $blocks_read blocks from $input_file\n";
     }
close OUT;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...