一.数组格式
数组是一个包含一系列元素的表.
格式如下:
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记录一下当时的下标