免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2500 | 回复: 1
打印 上一主题 下一主题

Perl的行指定位置文本替换如何实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-08 16:50 |只看该作者 |倒序浏览
本帖最后由 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;

论坛徽章:
0
2 [报告]
发表于 2015-04-08 16:58 |只看该作者
试了下,这样就可以,自己太蠢。

substr($array[$i],n,m)=$inputstr;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP