Chinaunix
标题:
请教:awk {}和{()}的区别
[打印本页]
作者:
sghsky
时间:
2009-08-11 17:10
标题:
请教:awk {}和{()}的区别
awk -F: '{(total+=$3)};END{print "total : " total}' passwd
awk -F: '(total+=$3);END{print "total : " total}' passwd
这两个有什么区别,得出的结果是不一样的。
作者:
ywlscpl
时间:
2009-08-11 17:16
还真没试过把语句用括号括起来
作者:
liaosnet
时间:
2009-08-11 17:17
标题:
回复 #1 sghsky 的帖子
直接() 相当于 (){print $0}
{} 就是{}
这就是差别~~
作者:
kwokcn
时间:
2009-08-11 17:17
你可以这么认为:
在{}内部的,是awk的处理语句;在{}外部的,是awk是否执行其后{}中处理语句的判断条件。
当判断条件后面{}不存在时,默认为存在一个{print $0}。
total+=$3是一个赋值语句,在{}外面时同样也是个判断条件,如果完成赋值后total为非0,则条件为真。
作者:
blackold
时间:
2009-08-11 17:18
在这里() 是多余的,而{}是必需的。
作者:
seeLnd
时间:
2009-08-11 17:26
awk -F: '(total+=$3); END{print "total : " total}' passwd
等同于
awk -F: '(total+=$3){print}; END{print "total : " total}' passwd
等同于
awk -F: '{ if ((total+=$3) != 0) print }; END{print "total : " total}' passwd
作者:
ywlscpl
时间:
2009-08-11 17:36
这里讨论awk '{(cmd)}'的形式,以前从未考虑过{}中的语句加括号的问题
[root@Mylinux tmp]# echo -e "1 2 3\n1 2 3"| awk '{(s+=$1)}END{print s}'
2
[root@Mylinux tmp]# echo -e "1 2 3\n1 2 3"| awk '{(print)}END{print s}'
awk: {(print)}END{print s}
awk: ^ syntax error
awk: {(print)}END{print s}
awk: ^ syntax error
[root@Mylinux tmp]# echo -e "1 2 3\n1 2 3"| awk '{(pp)}END{print s}'
[root@Mylinux tmp]#
复制代码
可以看出awk '{(cmd)}'形式,cmd不能为一个action,只能是一个pattern,var=xxx这种形式也是一个特殊的pattern
作者:
blackold
时间:
2009-08-11 17:42
pattern{action}
在{}里面都是action吧。
这里所说的()只是expression 用来改变运算顺序的。
作者:
ywlscpl
时间:
2009-08-11 17:46
标题:
回复 #8 blackold 的帖子
awk '{(cmd)}'
没错啊,{}中的都是action,(cmd)是一个action
我说的是cmd只可能是pattern的形式
作者:
ywlscpl
时间:
2009-08-11 17:51
标题:
回复 #8 blackold 的帖子
[root@Mylinux tmp]# echo -e "1 2 3\n1 2 3"| awk '{($1 $2)}END{print s}'
[root@Mylinux tmp]# echo -e "1 2 3\n1 2 3"| awk '{("xyz")}END{print s}'
[root@Mylinux tmp]#
复制代码
这里()中的$1 $2和"xyz",awk都认为是字符串
其中awk '{($1 $2)}END{print s}'就是awk '{("1 2")}END{print s}'
[root@Mylinux tmp]# echo -e "1 2 3\n1 2 3"| awk '{("1 2")}END{print s}'
[root@Mylinux tmp]#
复制代码
作者:
blackold
时间:
2009-08-11 17:59
标题:
回复 #9 ywlscpl 的帖子
嗯,确实要研究研究awk中的()。
作者:
sghsky
时间:
2009-08-11 18:58
大家的回复让我学到很多东西,谢谢各位大虾了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2