免费注册 查看新帖 |

Chinaunix

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

我来出题,看看SHELL、PERL、C或其它语言谁快? [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
21 [报告]
发表于 2010-06-12 14:41 |只看该作者
没有自以为挺公平,因为本来就是特意出的对SHELL来说是长项的题。

你说我是“一 shell 粉,Perl 黑”,这个算是,也不是。我的意图是3楼、14楼表达过了。

发帖原因是 http://bbs3.chinaunix.net/thread-1718391-7-1.html ,详见62楼之前的几楼。

论坛徽章:
0
22 [报告]
发表于 2010-06-12 17:15 |只看该作者
呵呵,我来围观的,我只能做到哪个能达到目的就用哪个,并不会性能的问题,因为通常我只能想到一个办法,甚至是管道很多次或者生成很多临时文件的办法,哈哈,我是初学者。

论坛徽章:
0
23 [报告]
发表于 2010-06-12 19:18 |只看该作者
  介样的贴子相当受瞩目,大拇指扭了筋,打字好麻烦。

lz 给的第二题,俺试了一下,和写一个文件的速度相当,也想不出什么好办法了,请 Perl 高手指点。

第一题俺给个解法。
另外,几十M的文件确实测不出啥东西,俺用2G的文件测了下,还行。

  1. my $offset = 0;        my $s_counter = 0;
  2. my $buf = q{};

  3. open(FILE, '<', 'ceshi') or die $!;
  4. while (1) {
  5.         seek(FILE, $offset, 2);
  6.         read(FILE, $buf, 1);
  7.         if ($buf eq $/) {
  8.                 $s_counter++;
  9.                 if ($s_counter == 7) { print( (<FILE>)); last; }
  10.         }
  11.         $offset--;
  12. }
  13. close FILE;
复制代码
Total Elapsed Time = 0.030991 Seconds
  User+System Time = 0.030991 Seconds

论坛徽章:
0
24 [报告]
发表于 2010-06-13 07:38 |只看该作者
如果理解各语言的业务逻辑大致在操作系统中的实现过程,这么简单的业务想想就知道了,没什么好测的。

论坛徽章:
0
25 [报告]
发表于 2010-06-13 09:21 |只看该作者
是骡子是马,拉出来溜溜,只会最简单shell的菜鸟拿望远镜围观。
端午节后看结果吧

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
26 [报告]
发表于 2010-06-13 09:34 |只看该作者
回复 23# redspider


第一题就不比了,因为我明显是向着SHELL。
第二题相对比较公平,因为我也不知道如何写个高效的SHELL脚本。这个还要SHELL高手们出手了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
27 [报告]
发表于 2010-06-13 09:44 |只看该作者
搜到两个帖子
http://www.vvcha.cn/c.aspx?id=107638
http://bbs.chinaunix.net/thread-1230953-1-1.html
发现第二问可以这样写,看来第二问也明显不公平
ed file <<EOF
$ m 1
1 m $
w
q
EOF

论坛徽章:
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
28 [报告]
发表于 2010-06-13 09:49 |只看该作者
回复 27# beginner-bj


    这个对大文件就不行了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
29 [报告]
发表于 2010-06-13 09:59 |只看该作者
我觉得已经挺快的了,黑哥可有更快的方法?
  1. 09:58:18 root@ST-TEST:[/]#ls -l file
  2. -rw-r--r--   1 root     system    345381000 Jun 13 08:27 file
  3. 09:58:25 root@ST-TEST:[/]#time ed file <<EOF
  4. $ m 1
  5. > $ m 1
  6. > 1 m $
  7. > w
  8. > q
  9. > EOF

  10. ?
  11. ?

  12. real    0m18.88s
  13. user    0m10.21s
  14. sys     0m4.23s
  15. 09:58:47 root@ST-TEST:[/]#
  16. 09:58:47 root@ST-TEST:[/]#
复制代码

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
30 [报告]
发表于 2010-06-13 10:14 |只看该作者
回复 29# beginner-bj


ed 是 editor
awk,sed 是 filter

ed会一次性将文件内容都载入内存,大文件不行的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP