免费注册 查看新帖 |

Chinaunix

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

awk的bug? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-13 12:12 |只看该作者 |倒序浏览
环境:
[root@localhost scripts]# uname -a
Linux localhost.localdomain 2.6.27.5-117.fc10.i686 #1 SMP Tue Nov 18 12:19:59 EST 2008 i686 i686 i386 GNU/Linux

awk --version
GNU Awk 3.1.1
Copyright (C) 1989, 1991-2002 Free Software Foundation.


代码:
[root@localhost home]# cat test.sh
#!/bin/sh
ret=$(echo "+" | awk -F';' '

        BEGIN{
                print"-"
        }
              
        {print "-"}
              
        END{
                 printf("aa=%s,bb=%s\n",aa,bb)
        }
        'aa="3.2.3" bb="3.2.2")
                 
echo $ret

执行结果:
[root@localhost home]# ./test.sh
- - + aa=3.20.3,bb=3.2.2

结果应该是下面的才对:
- - + aa=3.2.3,bb=3.2.2





如果将代码修改如下:
[root@localhost home]# cat test.sh
#!/bin/sh
ret=$(echo "+" | awk -F';' '

        BEGIN{
                print"-"
        }
              
        {print "-"}
              
        END{
                 printf("aa=%s,bb=%s\n",aa,bb)
        }
        'x=1 aa="3.2.3" bb="3.2.2")
                 
echo $ret

结果就对了:
[root@localhost home]# ./test.sh
- - + aa=3.2.3,bb=3.2.2


怀疑是awk解释第一个参数赋值的时候有问题,如果第一个参数是两位以下就没问题,两位以上就有问题,awk最新版本3.1.8也有这样的问题

论坛徽章:
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
2 [报告]
发表于 2010-06-13 12:17 |只看该作者
回复 1# greensea13


   
'aa="3.2.3

添加空白
' aa="3.2.3

论坛徽章:
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-06-13 12:28 |只看该作者
不知道楼主要实现什么功能
#ret=$(echo "+" | awk -F';' 'BEGIN{print"-"}{print "-"}END{printf("aa=%s,bb=%s\n",aa,bb)}' aa="3.20.3" bb="3.2.2")
#echo $ret
- - aa=3.20.3,bb=3.2.2


“提问的智慧”里面有一句:不要轻易说自己发现了bug

论坛徽章:
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
4 [报告]
发表于 2010-06-13 12:32 |只看该作者
我要去吃饭了,你们慢慢玩玩啊。^_^我很快回来。

论坛徽章:
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
5 [报告]
发表于 2010-06-13 12:37 |只看该作者
最近流行吃饭哥

论坛徽章:
0
6 [报告]
发表于 2010-06-13 12:39 |只看该作者
回复 1# greensea13


    回复2楼:
           确实好用,非常感谢!
           但是没写空格awk也能解释,只是解释错了,不是问题么?
           awk对此有说明么?
           
           十分感谢

  恢复3楼:
          和功能无关,原来的脚本处理校验的,很长,没必要列出来,现在只是把代码精简出来
         
          十分感谢

论坛徽章:
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
7 [报告]
发表于 2010-06-13 12:43 |只看该作者
回复 6# greensea13


    肯定是问题啊。
比如你写错了代码,这是问题吗?是问题,但不是bug。发现bug的概率比中彩高些,不过也非常低。

论坛徽章:
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
8 [报告]
发表于 2010-06-13 12:56 |只看该作者
它是按shell和awk的语法来解释的,对于shell和awk来说,并没有错。解释的结果不是你所期望的,对于你来说是错了。

论坛徽章:
0
9 [报告]
发表于 2010-06-13 15:08 |只看该作者
awk脚本嵌入到shell里面确实会出现你说的,所以一般比较复杂的awk脚本还是单独写入文件然后利用
awk -fscript方式来调用,可靠一点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP