我正在尝试这样做:
我 FTP 一个包含单个单词的大文件(~144,000,每行一个单词)
我需要打开上传的文件并创建 100 行的文件,每行最多一个字(01.txt、02.txt 等)。
我希望在创建 100 的文件后从原始文件中删除已处理的 100。
服务器是共享的,但如果需要,我可以安装模块。
现在,我的代码非常粗糙,因为我的知识非常有限。一个问题是将整个文件打开到一个数组中?我假设共享服务器没有足够的内存来打开这么大的文件并一次全部读入内存?我只想要前 100 行。下面只是打开一个小到可以加载的文件并将 100 行放入一个数组中。没有其他的。我打字很快,所以可能有几个问题,但是显示我有限的知识和需要帮助。
use vars qw($Word @Words $IN);
my $PathToFile = '/home/username/public/wordlists/Big-File-Of-Words.txt';
my $cnt= '0';
open $IN, '<', "$PathToFile" or die $!;
while (<$IN>) {
chomp;
$Word = $_;
$Word=~ s/\s//g;
$Word = lc($Word);
######
if ($cnt <= 99){
push(@Words,$Word);
}
$cnt++;
}
close $IN;
非常感谢。
好的,我正在尝试实现以下代码:
#!/usr/bin/perl -w
BEGIN {
my $b__dir = (-d '/home/username/perl'?'/home/username/perl':( getpwuid($>) )[7].'/perl');
unshift @INC,$b__dir.'5/lib/perl5',$b__dir.'5/lib/perl5/x86_64-linux',map { $b__dir . $_ } @INC;
}
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
print CGI::header();
my $WORD_LIST='/home/username/public/wordlists/Big-File-Of-Words.txt';
sed 's/ *//g' $WORD_LIST | tr '[A-Z]' '[a-z]' | split -l 100 -a6 - words.
print 'Done';
1;
但我得到:
syntax error at split-up-big-file.pl line 12, near "sed 's/ *//g'"
Can't find string terminator "'" anywhere before EOF at split-up-big-file.pl line 12.
最后: 好吧,我想出了一个有效的快速解决方案。不漂亮:
#!/usr/bin/perl -w
BEGIN {
my $b__dir = (-d '/home/username/perl'?'/home/username/perl':( getpwuid($>) )[7].'/perl');
unshift @INC,$b__dir.'5/lib/perl5',$b__dir.'5/lib/perl5/x86_64-linux',map { $b__dir . $_ } @INC;
}
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use diagnostics;
print CGI::header();
my $sourcefile = '/home/username/public_html/test/bigfile.txt';
my $rowlimit = 100;
my $cnt= '1';
open(IN, $sourcefile) or die "Failed to open $sourcefile";
my $outrecno = 1;
while(<IN>) {
if($outrecno == 1) {
my $filename= $cnt.'.txt';
open OUT, ">$filename" or die "Failed to create $filename";
$cnt++;
}
print OUT $_;
if($outrecno++ == $rowlimit) {
$outrecno = 1;
close FH;
}
}
close FH;
我在这里找到了足够的信息让我继续前进。谢谢...