Chinaunix

标题: awk问题 [打印本页]

作者: zhaolianghz    时间: 2016-05-11 16:30
标题: awk问题
[root@shell ~]# awk 'BEGIN{for(i=1;i<=5;i++)print i}'               
1
2
3
4
5
[root@shell ~]# awk 'BEGIN{for(i=1;i<=5;i++)print i;print i}'
1
2
3
4
5
6     为什么第二个print i 输出的是6
[root@shell ~]# awk 'BEGIN{for(i=1;i<=5;i++)print i;print i;print i}'
1
2
3
4
5
6
6       为什么第三个print i 输出的是6


[root@shell ~]# cat test5
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@shell ~]# awk '{if($6<$7){da=$7-$6;print $1,da};{print $7-$6,da}}' test5
M.Tansley 4
4 4
J.Lulu 2
2 2
-7 2
0 2
-2 2

为什么后面的print da 输出的 3 4 5 行的值是: 2 2 2
作者: 287380917    时间: 2016-05-11 16:49
本帖最后由 287380917 于 2016-05-11 16:51 编辑

awk 'BEGIN{for(i=1;i<=5;i++)print i;print i}'
2个print暂时叫做A和B吧
for循环一次执行一次A,for循环结束之后执行B,此时i就是6,后面再打印多少次他也是6,因为不循环了
for之后如果想要循环一次执行一组命令的话,请放到{}中。
awk 'BEGIN{for(i=1;i<=5;i++){print i;print i}}'

下面那个if也是一样的,if条件只对第一个command起作用,‘;’之后的部分每读一行记录都执行了
作者: zhaolianghz    时间: 2016-05-11 16:57
回复 2# 287380917


    谢谢
作者: zhaolianghz    时间: 2016-05-11 17:37
回复 2# 287380917

还是有问题,为什么第二个print i 的i 的值是6,前面的是5,;后第二个print不是不参与循环了吗?为什么还会加1

   
作者: jason680    时间: 2016-05-11 17:46
回复 4# zhaolianghz


>> ...为什么第二个print i 的i 的值是6,前面的是5

不然你以为 i<=5,应该如何?
作者: zhaolianghz    时间: 2016-05-11 17:51
回复 5# jason680

你的意思就是跳出循环了,就需要i>5, 然后i就=6了?

   
作者: lll1985911    时间: 2016-05-11 23:01
回复 6# zhaolianghz
循环结束后i等于6,然后一直等于6,直到被再次赋值。

   
作者: 287380917    时间: 2016-05-12 09:32
回复 6# zhaolianghz
i=5,判断i<=5成立,进入循环,执行A,执行i++,i=6了,判断i<=5不成立,结束循环,执行B。
循环就结束了,i的值也就固定在了6,直到再次被赋值否则就一直是6了

   
作者: zhaolianghz    时间: 2016-05-12 11:02
回复 8# 287380917


    非常感谢




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2