LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3000|回复: 2

判断一个数是否2的幂[讨论awk的扩展用途]

[复制链接]
发表于 2004-12-1 13:58:26 | 显示全部楼层 |阅读模式

  1. home_king@ibox /tmp/data_c $ cat power.awk
  2. BEGIN {
  3.   reg=num;
  4.   while(1){
  5.     if(num%2==0){
  6.       if((num=num/2)<=2){
  7.         printf("yes, %s is a power of 2.\n",reg);
  8.         break;
  9.       }
  10.     }
  11.     else{
  12.       printf("no, %s is not a power of 2.\n",reg);
  13.       break;
  14.     }
  15.   }
  16. }
  17. home_king@ibox /tmp/data_c $ MYNUM=16
  18. home_king@ibox /tmp/data_c $ awk -f power.awk -v num=$MYNUM
  19. yes, 16 is a power of 2.
  20. home_king@ibox /tmp/data_c $ MYNUM=18
  21. home_king@ibox /tmp/data_c $ awk -f power.awk -v num=$MYNUM
  22. no, 18 is not a power of 2.
复制代码


awk,很好用的文本分析器,最大的特色在于具有类似C的编程语法却又不失脚本编程的简易度。我个人认为,它可以作为高级语言编程的原型开发工具,用来测试算法。比之perl,它的优势在于语法简练。

大家可以发表一下心得,或者展示一下awk的算法演示例子。
发表于 2004-12-1 23:10:39 | 显示全部楼层

awk功能强大,但不如python语法优雅

def foo(x):
    if x in (1,2):
        return True
    elif x % 2 != 0 or 0 == x:
        return False
    else:
        return foo(x / 2)
   
map(foo,range(100))
[False, True, True, False, True, False, False, False, True, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
发表于 2004-12-1 23:12:37 | 显示全部楼层

  1. def foo(x):
  2.     if x in (1,2):
  3.         return True
  4.     elif x % 2 != 0 or 0 == x:
  5.         return False
  6.     else:
  7.         return foo(x / 2)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表