awk 数组中所定义的数组以哪一格域为下标,则数组则代表这一域
如name[$2] 则将$2 这一列组合成一数组,如果赋值,则代表所赋值组合成的数组,例如: name[$2]=$1
则name是由$1这一列组成的数组,如果,name[$2]=1,则根据NR的值组成NR个由1组成的数组,每个元素用name[NR]表示,每个name[NR]=1,看下面的例子:
[root@localhost awk]# cat file
1214 42 5 34 543 54
2323 434 43 34 434 44
122 32
1213 324 4345 456 56 77
1233 q3 we23 2342 2342
213 213 546 798 987 654
[root@localhost awk]# awk '{name[$0]=$1};END{for(i in name) print name[i]}' file
122
2323
1233
1213
213
1214
[root@localhost awk]# awk '{name[$0]=1};END{for(i in name) print name[i]}' file
1
1
1
1
1
1
name这个数组名则无法直接打印:
[root@localhost awk]# awk '{name[$2]=1};END{for(i in name) print name}' file
awk: (FILENAME=file FNR=6) fatal: attempt to use array `name' in a scalar context
然而,for(i in name) i则表示的是name[$x]中的x这一列,因为x在此是下标,就是$x,如:
[root@localhost awk]# awk '{name[$2]=1};END{for(i in name) print i}' file 324
q3
32
42
213
434
END 语句中,name数组仍然表示的是$2,并不改变,而name[i] 的值会是1,i的值为$2的值,则i为name的下标,name["42"]=42 name["434"]=434....
阅读(2514) | 评论(0) | 转发(0) |