免费注册 查看新帖 |

Chinaunix

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

如果用awk命令对一行超长文本进行格式化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-15 21:41 |只看该作者 |倒序浏览
如果用awk命令对一行超长文本进行格式化(文本文件 只有一行,没有换行)

AAAAAAAAAA1111222233334444...


如何才能格式化成
AAAAAAAAAA
1111,2222
3333,4444
.....

前面用sed写了下 文本小时候处理还可以,当文件到了1M后就慢了 20M时候基本就没戏了。

论坛徽章:
0
2 [报告]
发表于 2010-03-15 23:04 |只看该作者
  1. open(FILE, '<', 't.log') or die $!;
  2. my $longlongstring = do { local $/; <FILE> };
  3. close FILE;


  4. my $begin_position = 10;
  5. my $step = 4;

  6. print substr($longlongstring,0, $begin_position), "\n";

  7. my $len_of_longstring = length($longlongstring);
  8. while ($begin_position+$step < $len_of_longstring) {
  9.         print substr($longlongstring, $begin_position, $step), ',';
  10.         $begin_position += $step;
  11.         print substr($longlongstring, $begin_position, $step), "\n";
  12.         $begin_position += $step;
  13. }
复制代码
20MB长字符串,10s够不够快?
字符串超过100MB要考虑一下内存...

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2010-03-15 23:22 |只看该作者
学习一下2楼的Perl脚本

论坛徽章:
0
4 [报告]
发表于 2010-03-16 08:44 |只看该作者
本帖最后由 where27 于 2010-03-16 08:53 编辑

回复 1# max5


  1. [code]sed 's/./&\n/10' file |sed '1!{s/\(.\{4\}\)\(.\{4\}\)/\1,\2\n/g}'
复制代码
用全局替换不知道会不会好一点,这样应该不用循环吧,碰到4个字符先用逗号分隔,然后换行。

论坛徽章:
0
5 [报告]
发表于 2010-03-16 08:56 |只看该作者
  1. awk -F '' '{for (i=1;i<=NF;i++) {if (i==10||(i-10)%8==0&&i>10) {print $i;continue}if ((i-10)%4==0&&i>10) $i=$i",";printf $i}}' file
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-03-16 09:03 |只看该作者
回复 5# ywlscpl


    厉害,你这样会快很多啊,为什么awk的效率会这么高,比我用sed的效率要高几百倍,请教!

论坛徽章:
0
7 [报告]
发表于 2010-03-16 09:14 |只看该作者
回复 6# where27


    两个管应该比一个管慢一些吧

论坛徽章:
0
8 [报告]
发表于 2010-03-16 09:21 |只看该作者
回复 7# ywlscpl


    好像不是管道的问题,一个管的sed也比不过1个管的awk,差得很远还

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
9 [报告]
发表于 2010-03-16 09:31 |只看该作者
测试结果如何?

论坛徽章:
0
10 [报告]
发表于 2010-03-16 09:51 |只看该作者
这题考的是算法~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP