Chinaunix

标题: 超长文本的字串替换问题 [打印本页]

作者: Neo98    时间: 2009-11-09 21:30
标题: 超长文本的字串替换问题
文本就一行  有2W多个字符  超出AWK上限了
有何好办法 用脚本的方法替换字串?
作者: zhanglipeng    时间: 2009-11-09 21:44
perl
作者: angle4    时间: 2009-11-09 22:03
awk 有上限??

awk 处理的上限只和内存大小有关吧
作者: lululau    时间: 2009-11-09 22:20
啥版本的awk呀
我的完全没有问题阿
lululau@localhost: ~ $ ruby -e '
20000.times {|x|print "a"}' | gawk '{gsub(/./,"&&")}1' | wc -c
   40001
lululau@localhost: ~ $ ruby -e '
20000.times {|x|print "a"}' | awk '{gsub(/./,"&&")}1' | wc -c
   40001
作者: haimming    时间: 2009-11-09 23:11
想过dd + sed,但不能确定会不会:

被替换的字符串从中间被切割而导致漏了呢?

请高手指示一二
作者: haimming    时间: 2009-11-11 00:04
标题: 回复 #4 lululau 的帖子
因为是行处理,有可能会出现这样的问题的,和内存有关,试了下内存不够会显示
awk: cmd. line:1: (FILENAME=data FNR=1) fatal: set_record: databuf: can't allocate 1073741824 bytes of memory (Cannot allocate memory)
sed 也一样
我73xM的空余,处理了840M的文件
作者: cxfcxf    时间: 2009-11-11 04:03
perl的read
你要做什么呢

  1. development:~# cat read.pl
  2. #!/usr/bin/perl

  3. use strict;
  4. use warnings;

  5. my $string;

  6. while((read DATA,$string,10) != 0){
  7.     print "$string\n\n";
  8. }

  9. __DATA__
  10. dhsafhaklfdj;lasfjlkafjlkasd;falkdfhlkasdfhlsfhlFRLKfhlsFHLfhsDFHlfjlSFJLsfdjSJLKSjJfSDFJdf;sF;JKSfjlsfJKLF
复制代码


  1. development:~# ./read.pl
  2. dhsafhaklf

  3. dj;lasfjlk

  4. afjlkasd;f

  5. alkdfhlkas

  6. dfhlsfhlFR

  7. LKfhlsFHLf

  8. hsDFHlfjlS

  9. FJLsfdjSJL

  10. KSjJfSDFJd

  11. f;sF;JKSfj

  12. lsfJKLF

复制代码

作者: cxfcxf    时间: 2009-11-11 05:21
发重复了
作者: Minsic    时间: 2009-11-11 08:58
装个gawk吧,就没这问题了
作者: haimming    时间: 2009-11-11 23:49
帮顶,主要想引申一下:
如果一文件只有一行,而且文件大于内存,这时sed,awk都会处理不了,只能分割,但分割可能存在将要替换的字符串割开,怎么处理?

想法有些bt

想到一个:先分割处理,合并后重新分割,再对先前分割处单独处理
再合并
有更好的方法不?

[ 本帖最后由 haimming 于 2009-11-12 00:02 编辑 ]
作者: Neo98    时间: 2009-11-16 22:08
多谢各位。服务器权限有限 非管理员  安装新程序没办法了
看了下服务器支持perl  小弟不熟 帮指个思路
文本就一行  字符很多  都是程序产生的XML  要替换其中的<count>xx</count> 为固定内容字串
作者: haimming    时间: 2009-11-16 22:15
标题: 回复 #11 Neo98 的帖子
2w多字符应该就50k左右的文件,
awk,sed什么版本?
作者: ttcn_cu    时间: 2009-11-16 22:36
XML 一行和多行含义完全一样,干嘛弄成这么尴尬的文件??
找到你的输入源,让他们换换习惯,不然说不定以后还要吃苦...




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2