免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell 求助
12下一页
最近访问板块 发新帖
查看: 2510 | 回复: 10
打印 上一主题 下一主题

求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-10 21:37 |只看该作者 |倒序浏览
lllllll

[ 本帖最后由 girlbird 于 2009-6-11 22:58 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-06-10 21:40 |只看该作者

回复 #1 girlbird 的帖子

太简单了吧?

论坛徽章:
0
3 [报告]
发表于 2009-06-10 21:56 |只看该作者
原帖由 poke006 于 2009-6-10 21:40 发表
太简单了吧?



论坛徽章:
0
4 [报告]
发表于 2009-06-11 09:48 |只看该作者

  1. #!/bin/bash

  2. if [ -z "$1" -o -n "${1//[0-9]}" ];then
  3.         echo "usage $0 N"
  4. elif [ $1 -le 0 ];then
  5.         :
  6. elif [ $1 -lt 10 ];then
  7.         echo $(($1 * 10))
  8. elif [ $1 -lt 100 ];then
  9.         echo $1 | sed 's/.$/.&/'
  10. elif [ $1 -lt 1000 ];then
  11.         echo $(($1*$1))
  12. else
  13.         printf "0x%x\n" $1
  14. fi
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-06-11 13:50 |只看该作者
  1. echo  | awk -v n="$1" 'n>=0&&n<10{print n*10}n>=10&&n<100{print n/10}n>=100&&n<1000{print n^2}n>=1000{system("printf \"%x\n\" "n"")}'
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-06-11 14:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2009-06-11 22:03 |只看该作者

  1. [rockfall@A]$time for i in {1..10000};do ./a.sh $i >/dev/null;done

  2. real        0m45.696s
  3. user        0m23.641s
  4. sys        0m18.794s
  5. [rockfall@A]$time for i in {1..10000};do ./b.sh $i >/dev/null;done

  6. real        1m56.366s
  7. user        0m52.184s
  8. sys        0m53.239s
  9. [rockfall@A]$time for i in {1..10000};do ./c.sh $i >/dev/null;done

  10. real        0m43.403s
  11. user        0m21.706s
  12. sys        0m18.544s
复制代码

a.sh是4#的,b.sh是ywlscpl 的,c.sh是我用case写的
awk的为什么会慢些?

论坛徽章:
0
8 [报告]
发表于 2009-06-11 22:07 |只看该作者
我猜是因为ywlscpl那个写法是要每个条件都要判断的原因吧

论坛徽章:
0
9 [报告]
发表于 2009-06-11 22:15 |只看该作者
而且system调用还开启了一个子SHELL:


  1. [user@host] ~ $ awk '
  2. BEGIN{
  3. system("ps -ef | grep $(/bin/echo $PPID)");
  4. }'
  5.   501  3037  1129   0   0:00.00 ttys000    0:00.00 awk ^JBEGIN{^Jsystem("ps -ef | grep $(/bin/echo $PPID)");^J}
  6.   501  3038  3037   0   0:00.00 ttys000    0:00.00 sh -c ps -ef | grep $(/bin/echo $PPID)
  7.   501  3040  3038   0   0:00.00 ttys000    0:00.00 grep 3037
  8. [user@host] ~ $

复制代码

论坛徽章:
0
10 [报告]
发表于 2009-06-11 22:23 |只看该作者

回复 #8 lululau 的帖子

应该不在这儿

  1. [rockfall@A]$time for i in {1..10000};do ./b.sh $i >/dev/null;done

  2. real        1m59.974s
  3. user        0m52.728s
  4. sys        0m52.895s
  5. [rockfall@A]$cat b.sh
  6. echo |awk -v n="$1" 'n>=0&&n<10{print n*10;exit}n>=10&&n<100{print n/10;exit}n>=100&&n<1000{print n^2;exit}n>=1000{system("printf \"%x\n\" "n"");exit}'
复制代码


LS的这个可能也不是,如果做999次awk也比其它的慢;
刚才想可能还是其它两个用的一些是内建命令吧

[ 本帖最后由 haimming 于 2009-6-11 22:39 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP