- 论坛徽章:
- 0
|
本帖最后由 yhou31 于 2015-04-08 16:51 编辑
领导的要求是:应用Perl技术,对上亿行的文本文件,较为快速的替换每一行的第N~第(N+M)个字符为特定/随机的M个字符。
我设计如下,使用Tie-File模块,该模块用perl的数组代表一个文件,文件的每一行对应数组的一个元素,第一行为元素0,第二行为1,...
文件本身实际并不加载到内存,对数组元素的操作立刻作用到文件里。
脚本框架:
use Tie::File;
my @array;
my $infile = "$dir_to_process/$filename";
tie @array, 'Tie::File', $infile or die "Can't tie the file for reading";
#行数
my $n_recs = @array;
for(my $i=0;$i<$n_recs;$i++){
#打印第N~第(N+M)个字符
print substr($array[$i],n,m)."\n";
#替换第N~第(N+M)个字符为特定/随机的M个字符
#整行查找替换我会,如下;区间替换查找我不会。。。
$array[$i] =~ s/abcd/efgh/g;
#求帮助 :)
}
untie @array;
|
|