尝试根据文件中存在的匹配将fastq文件拆分为多个文件,因此输出文件可以超过500个。提供两个输入文件 - 一个用于匹配和其他内容(fastq)。将匹配放在不同的文件中。此代码完美无缺,但无法创建超过502个文件。 502以上,说无法制作文件。这是循环中文件句柄的限制。我需要创建>一次502个文件。有解决方案吗感谢
my @fh_array;
foreach(@file_names){
chomp $_;
local *OUT;
open (OUT, ">", "$_\.txt") or die "cannot write file";
push @fh_array, *OUT;
}
# In for loop, it works
print $fh_array[0] "Hello";
答案 0 :(得分:1)
我不认为这是一个Perl问题。我用1000个文件运行它,没问题。使用ulimit可以显示(并可能设置)的打开文件数量有每个进程限制。
答案 1 :(得分:0)
虽然您的系统可能存在一些限制,导致许多文件句柄同时打开,但事实上这也是一个不必要或非常实用的强力解决方案。如果您只是在需要时打开文件而不是一次打开所有文件,我会打赌您不会注意到显着的性能差异。
例如:
write_to_file($file, @lines);
sub write_to_file {
my ($file, @lines) = @_;
open my $fh, ">>", $file or die "Cannot open file '$file' for appending: $!";
print $fh @lines;
}