+ -
当前位置:首页 → 问答吧 → awk数组

awk数组

时间:2011-06-28

来源:互联网

[root@jssweb tools]# awk '{a[$1]}END{for(i in a) print i,a[i]}' employees
mary
julia
billy
lily
cat
tom
Billy
[root@jssweb tools]# cat employees
tom           4423     1234       5/12/09   546611
cat           3134     1111       4/23/45   232424
mary          3455     4444       4/32/234  422444
billy         2345     4444       9/23/13   650000
julia         1111     1000      9/23/13   313131
Billy         34234    7666        2/2/2    222222
lily          233       100       1/1/1     22222
lily          233       100       1/1/1     22222
lily          233       100       1/1/1     22222
lily          233       100       1/1/1     22222

这个意思是不是数组a以$1作为数组a的元素,打印a数组的所有元素

作者: 267020090   发布时间: 2011-06-28

以$1作为数组下标,
awk中的数组其实是关联数组,与c语言等的数组还是有区别的
awk 的数组就相当hash表

作者: liion631818   发布时间: 2011-06-28

就是说 数组元素 hash后 数组元素是唯一的吧

作者: 267020090   发布时间: 2011-06-28

回复 267020090


    下标是唯一的
hash也是键是唯一的,值可以任意吧

作者: liion631818   发布时间: 2011-06-28

那上面lily 不是有多个吗 怎么只打印出一个

作者: 267020090   发布时间: 2011-06-28

本帖最后由 liion631818 于 2011-06-28 20:17 编辑

回复 267020090


    a[$1]
这样的写法不是 $1是下标吗?
for i in a
i 是循环取a数组的下标

awk '{a[$1]++}END{for(i in a) print i,a}' employees

把你的代码改成上面那样,你去分析下执行的结果

作者: liion631818   发布时间: 2011-06-28

饿 $1 是下标 awk数组不允许数组下标重复 所以会过滤

这个意思吧

作者: 267020090   发布时间: 2011-06-28

回复 267020090


    差不多这个意思吧,下标就是唯一的

作者: liion631818   发布时间: 2011-06-28

[root@jssweb tools]# awk '{a[$1]}END{for(i in a) print i}' employees
mary
julia
billy
lily
cat
tom
Billy

搞晕了 这个i是取 a数组元素 还是 a数组的下标

作者: 267020090   发布时间: 2011-06-28

回复 267020090


    关联数组下标是可以为字符串的,你还是觉得下标只能是数字,先想清楚这点。
    for i in a, i 提取的是a数组的下标

作者: liion631818   发布时间: 2011-06-28