免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: bikkuri
打印 上一主题 下一主题

[文本处理] 细胞分裂游戏 [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
21 [报告]
发表于 2014-04-01 15:37 |只看该作者
回复 16# bikkuri
  1. BEGIN{srand();
  2. b["o-1"]=".";b["o-2"]="0";b["o-3"]="o";b["0-1"]=".";b["0-2"]="8";b["0-3"]="0";b["8-1"]=".";b["8-2"]="oo";b["8-3"]="o.";b[".-1"]=".";b[".-2"]=".";b[".-3"]=".";
  3. p="o";
  4. while(i++<100){
  5.   print i,p;
  6.   t="";
  7.   l=split(p,x,"");
  8.   for(n=1;n<=l;n++){
  9.     r=rand();
  10.         if(r<0.1){j=1}
  11.         else if(r<0.9){j=2}
  12.         else{j=3};
  13.         t=t b[x[n]"-"j];
  14.   };
  15. if(t~/^\.*$/){print i+1,t;exit};
  16. p=t
  17. }
  18. }
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
22 [报告]
发表于 2014-04-01 16:08 |只看该作者
本帖最后由 bikkuri 于 2014-04-01 18:01 编辑

哇!好强啊!我本来还打算参照你的perl脚本自己改awk脚本的呢!太感谢了!
awk的效率好像还是稍微比perl差一点点,但差的不多吧。
perl脚本用大于号>可以重定向到文件,但是用tee不能重定向。
awk脚本的话两个都可以。
如果增加细胞周期数,在linux下脚本运行不到150行左右就运行不下去了。。。
但是从前面几行运行速度来看,并不是运行速度变慢了,而是根本运行不下去了。。。
不知道是不是缓冲区溢出了?
从重定向生成的脚本来看,最后一行长度是147456,等于16进制的24000。
难道这是缓冲区的上限?
有办法可以写出运行千行的脚本吗?
还有感觉awk脚本产生的细胞数总是会比perl脚本产生的细胞数要少。
我试了很多次都是这样的结果。
不知道是不是因为随机数的原因。
难道perl的随机函数值比awk的随机函数值偏大?

yestreenstars 发表于 2014-04-01 15:27
回复 18# bikkuri

从我19楼的效率测试你应该知道我是怎么重定向的了吧?

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
23 [报告]
发表于 2014-04-01 16:10 |只看该作者
这次修改后效率高多了。
至少在我的busybox上可以在十几分钟之内跑完。
而昨天的脚本即使在linux上也要跑一个多小时。
是什么导致了效率的差别这么大呢?

yinyuemi 发表于 2014-04-01 15:37
回复 16# bikkuri

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
24 [报告]
发表于 2014-04-01 16:13 |只看该作者
回复 23# bikkuri


    l=split(p,x,""); 这一步
    之前的脚本,每次循环,都要split, 把它放到循环外,所以快了

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
25 [报告]
发表于 2014-04-01 16:43 |只看该作者
原来是这样!
yinyuemi 发表于 2014-04-01 16:13
回复 23# bikkuri

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
26 [报告]
发表于 2015-02-12 20:07 |只看该作者
本帖最后由 bikkuri 于 2015-02-12 20:21 编辑

怎么在我的树莓派(Debian操作系统)上运行这个程序的awk版本报错了:
  1. awk: ./cell.awk.sh: line 28: illegal reference to array b
复制代码
第28行
  1. for(i=0;i++<length(b);){
复制代码
非法引用数组b?
要怎么修改才能避免这个错误呢?
perk版本倒是没有任何错误。
谢谢。

yestreenstars 发表于 2014-04-01 15:20
回复 14# bikkuri

根据我的perl脚本改写的awk脚本:效率测试:从上面的数据可知,awk的效率不比perl低。 ...

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
27 [报告]
发表于 2015-02-13 01:10 |只看该作者
我发现树莓派上的awk版本是mawk,我重新装了一个gawk就不报错了。

bikkuri 发表于 2015-02-12 20:07
怎么在我的树莓派(Debian操作系统)上运行这个程序的awk版本报错了:第28行非法引用数组b?
要怎么修改才能 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP