LinuxSir.cn,穿越时空的Linuxsir!

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

awk的运行结果的一个疑问。

[复制链接]
发表于 2009-2-19 16:36:53 | 显示全部楼层 |阅读模式
[root@localhost test]# cat grade.txt
M.Tansley       05/99   48311   Green   8       40      44
J.Lulu  06/99   48317   green   9       24      26
P.Bunny 02/99   48      Yellow  12      35      28
J.Troll 07/99   4842    Brown-3 12      26      26
L.Tansley       05/99   4712    Brown-2 12      30      28

[root@localhost test]# awk '{if ($1=".Bunny" && $4=="Yellow") print $0}' grade.txt
1 02/99 48 Yellow 12 35 28



以上为什么第一栏显示的是1,而不是想要的P.Bunny呢?
发表于 2009-2-19 19:02:21 | 显示全部楼层
Post by spider_bug;1949706
...
[root@localhost test]# awk '{if ($1=".Bunny" && $4=="Yellow") print $0}' grade.txt

$1=(".Bunny" && $4=="Yellow")的运行结果是“真”(就是“1”),
(根据awk运算的优先级,我给加了括号)。
回复 支持 反对

使用道具 举报

发表于 2009-2-19 19:26:43 | 显示全部楼层
试试
awk '{if ($1==".Bunny" && $4=="Yellow") print $0}' grade.txt
原因是你少加了一个等号
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-20 10:16:16 | 显示全部楼层
Post by zpcat;1949766
试试
awk '{if ($1==".Bunny" && $4=="Yellow") print $0}' grade.txt
原因是你少加了一个等号


阿哈,我有点粗心,是少了=号,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-20 10:18:19 | 显示全部楼层
Post by tomgrean;1949755
$1=(".Bunny" && $4=="Yellow")的运行结果是“真”(就是“1”),
(根据awk运算的优先级,我给加了括号)。

有点没看明白,虽然觉得你写的很正确,但是我有点看不明白,能再细说吗?我是少写了一个=,但$1出来为1,我还是有点迷糊。


你的意思是少加一个=号,按照awk的运行级,这其实是个赋值操作,给$1赋值的操作吗?是否这样理解?
回复 支持 反对

使用道具 举报

发表于 2009-2-20 12:27:33 | 显示全部楼层
我自己也不明白,如果是赋值的话,那么他就没有判断的能力啊!为何还会找到正确的行呢?
算了不想了,既然,找到问题了就行了。
回复 支持 反对

使用道具 举报

发表于 2009-2-20 12:35:01 | 显示全部楼层
看花眼了,我在看看...
回复 支持 反对

使用道具 举报

发表于 2009-2-20 13:08:55 | 显示全部楼层
我拿着你发的东西试了一下,后面print $0还是$1打印来的都是正常的

awk '{if($1==".Bunny" && $4=="Yellow") print $0}' a.txt
回复 支持 反对

使用道具 举报

发表于 2009-2-20 13:16:17 | 显示全部楼层
Post by spider_bug;1950051
有点没看明白,虽然觉得你写的很正确,但是我有点看不明白,能再细说吗?我是少写了一个=,但$1出来为1,我还是有点迷糊。


你的意思是少加一个=号,按照awk的运行级,这其实是个赋值操作,给$1赋值的操作吗?是否这样理解?


你的理解是對的,因為你少了個'=',操作變成了給$1賦真('1'),把bonye這個已經替換掉了,後面的'print $0'自然就...

再且,你把別的行,改成Yellow看看,你會發現更好玩的東西
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-24 10:59:17 | 显示全部楼层
Post by gogonkt;1950173
你的理解是對的,因為你少了個'=',操作變成了給$1賦真('1'),把bonye這個已經替換掉了,後面的'print $0'自然就...

再且,你把別的行,改成Yellow看看,你會發現更好玩的東西


[root@localhost test]# awk '{if ($1=".Bunny" && $4=="Yellow") print $0}' grade.txt
1 06/99 48317 Yellow 9 24 26
1 02/99 48 Yellow 12 35 28
改了一行,运行结果如上
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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