数组是一个包含一系列元素的表.
格式如下:
abc[1]=”xiaohong” abc[2]=”xiaolan”
解释:
abc:为数组名称
[1]、[2]:为数组元素下标,可以理解为数组的第1个元素、数组的第2个元素
xiaohong、xiaolan:元素值
例子1:定义数组,并且打印数组元素
[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";print a[0]}' xiaohong [root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";print a[1]}' Xiaolan
例子2:打印出所有元素的下标
[root@tab0 ~]# awk 'BEGIN{a[0]="xiaohong";a[1]="xiaolan";for (i in a)print i;}' 0 1
解释:将a定义为循环中的取值列表。从数组中取出的是数组的所有元素的下标
例子3:我们将/etc/passwd/里边的第一类定义成数组
[root@localhost ~]#:awk -F: '{{a[NR]=$1;}{print NR,a[NR];}}' /etc/passwd
例子4:利用数组统计每一个IP的访问量
[root@tab0 ~]# cat a 192.168.3.1 192.168.3.2 192.168.3.3 192.168.3.4 192.168.3.5 192.168.3.6 192.168.3.7 192.168.3.1 192.168.3.2 192.168.3.3 192.168.3.3 192.168.3.3 192.168.3.2 192.168.3.3 192.168.3.6 192.168.3.6 192.168.3.6 192.168.3.3 192.168.3.2 192.168.3.2
解决办法1:
[root@tab0 ~]# sort a |uniq -c | sort -nr 6 192.168.3.3 5 192.168.3.2 4 192.168.3.6 2 192.168.3.1 1 192.168.3.7 1 192.168.3.5 1 192.168.3.4
解决办法2:
[root@tab0 ~]# cat test.sh #!/bin/bash awk '{ list[$1]++ } END { max=0; for(i in list){ if (list[i] > max) { max=list[i];s=i } } print max,s }' a
解释:
list是一个数组,以$1为下标做++运算,也就是说,当$1内容重复一次,它的值就+加一次。
max初始值是0 ,然后用数组中的每一个元素的值去和max比较,如果比max大,就把这个元素的值赋值给max,那么max最后的值一定是最大的,也就是重复次数最多的。但是我们此时不知道下标(也就是$1的内容)是多少,所以用s记录一下当时的下标