免费注册 查看新帖 |

Chinaunix

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

这两个awk语句,怎么会不一样呢? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-03-02 10:52 |只看该作者
原帖由 ly5066113 于 2009-3-2 09:29 发表
当然不一样,&& 两边的条件是从左到右顺序执行的,如果前面的条件为假,后面的条件是不会执行的。

就是这个道理!!!

论坛徽章:
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
22 [报告]
发表于 2009-03-02 11:19 |只看该作者

回复 #20 ywlscpl 的帖子

按照你的说法,pattern就是var, var就是(33&&$14>0),怎么说$14>0不"作为pattern的一部分"?

论坛徽章:
0
23 [报告]
发表于 2009-03-02 11:25 |只看该作者
NF=33的后果是啥呢?

论坛徽章:
0
24 [报告]
发表于 2009-03-02 11:27 |只看该作者

回复 #22 blackold 的帖子

[root@Mylinux tmp]# echo "1 0 1" | awk '$1>0&&a=3{print}END{print a}'  
1 0 1
3
[root@Mylinux tmp]# echo "1 0 1" | awk 'a=3&&$1>0{print}END{print a}'      
1 0 1
1

论坛徽章:
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
25 [报告]
发表于 2009-03-02 11:29 |只看该作者

回复 #23 welcome008 的帖子

不同的awk版本处理也许不同。

刚刚做了测试。我的环境(GNU Awk 3.1.6):

$4>0 && NF=33 与 NF=33 && $4 >0的真值是一样的,但NF的值不同,所以awk的输出不一样。

论坛徽章:
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
26 [报告]
发表于 2009-03-02 11:33 |只看该作者

回复 #24 ywlscpl 的帖子

你的例子与NF不同,而且也不能说明$1>0不作为pattern的一部分吧。

论坛徽章:
0
27 [报告]
发表于 2009-03-02 11:34 |只看该作者
嗯,黑哥。我理解错了
NF=33&&$14>0
还是等价于  33&&$14>0 {...},并赋值NF为33&&$14>0

[root@Mylinux tmp]# cat file
1 0 1
0 0 0
[root@Mylinux tmp]# awk 'a=3&&$1>0{print $0","a}' file
1 0 1,1

[ 本帖最后由 ywlscpl 于 2009-3-2 11:35 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2009-03-02 11:35 |只看该作者
原帖由 blackold 于 2009-3-2 11:29 发表
不同的awk版本处理也许不同。

刚刚做了测试。我的环境(GNU Awk 3.1.6):

$4>0 && NF=33 与 NF=33 && $4 >0的真值是一样的,但NF的值不同,所以awk的输出不一样。



我的问题重点是
直接NF=33赋值,那对整条记录有啥影响?

比如记录为:
1 1 2
那么NF=33的话,对这条记录本身会否有影响。是否设置该条记录的字段个数,还是说NF仅仅就是一个变量,对记录没有任何影响?

论坛徽章:
0
29 [报告]
发表于 2009-03-02 11:36 |只看该作者

回复 #28 welcome008 的帖子

你对NF赋值后没有相关NF的操作应该就没影响

论坛徽章:
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
30 [报告]
发表于 2009-03-02 11:43 |只看该作者

回复 #28 welcome008 的帖子

"不同的awk版本处理也许不同。"是回答你的问题。

后半截回答LZ的问题。

改变NF会使gawk重新计算$0,会改变$0的值。

比较
diff <(awk '1' urfile) <(awk 'NF=33' urfile)
就知道了。


总之LZ的是不规范写法。扯远了。

[ 本帖最后由 blackold 于 2009-3-2 11:45 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP