|

楼主 |
发表于 2006-4-4 09:19:31
|
显示全部楼层
这几天,有琢磨了一下
我的理解:
1) awk 匹配的pattern {Action}是awk的固有模式,也可以省略掉pattern这个匹配关系。而我的例子里,Action有2个"{c++}{print c}",故会出现以上的错误。
2)a[$1]是一个数组,也可以叫关联数组吧。$1是数组中的值(开始这里搞的糊涂);而在awk里数组的值是要通过一个变数来读取的,这个变数首先要找到a[idnex]里的所有索引,找到该索引标的后,然后取到里面的值.也就是for (x in b) x就是变数,b就是那个数组名称。
3)awk在这个过程中的执行顺序,先匹配a.txt的 "FILENAME==a.txt"这个模式,然后执行后面的Action,即{a[$1]=$0}...........注意 0的出现绝对不会改变a[$1]的数组的值。他只是为后面的b[a[$1]]做铺垫。
4)前面执行匹配以后,在匹配FILENAME=="b.txt",然后执行后面的Action的动作,也就是{b[a[$1]]},而这里a[$1]要被前面定义的$0填充,相当于b[$0]。
5)所有匹配都执行完毕,然后在执行END这个匹配模式,然后执行Action里的输出。 |
|