一、前言
- AWK 可以使用关联数组这种数据结构,索引可以是数字或字符串。
- AWK关联数 组也不需要提前声明其大小,因为它在运行时可以自动的增大或减小。
二、数组语法格式
- array_name[index]=value
- array_name:数组的名称
- index:数组索引
- value:数组中元素所赋予的值
三、创建数组
定义了一个站点(sites)数组,该数组的索引为网站英文简称,值为网站访问地址
[root@192 ~]# awk 'BEGIN {
> sites["liang"]='www.liang.com';
> awk 'BEGIN {
sites["liang"]='www.liang.com';^C
[root@192 ~]# awk 'BEGIN {
sites["liang"]="www.liang.com";
> sites["google"]="www.google.com"
> print sites["liang"] "\n" sites["google"]
> }'
www.liang.com
www.google.com
四、访问数组元素
访问数组元素语法格式:array_name[index]
#访问数组元素
[root@192 ~]# awk -F: '{username[++i]=$1} END{print username[1]}' /etc/passwd
root
[root@192 ~]# awk -F: '{username[i++]=$1} END{print username[1]}' /etc/passwd
bin
[root@192 ~]# awk -F: '{username[i++]=$1} END{print username[0]}' /etc/passwd
root#按元数个数遍历
[root@192 ~]# awk -F: '{username[x++]=$1} END{for(i=0;i<x;i++)print i,username[i]}' /etc/passwd
0 root
1 bin
2 daemon
3 adm
4 lp
5 sync
6 shutdown
7 halt
8 mail
9 operator
10 games#按索引遍历
[root@192 ~]# awk -F: '{username[x++]=$1} END{for(i in username) {print i,us
ername[i]}}' /etc/passwd
35 liangl
26 qian
17 postfix
4 lp
36 han
27 yoa
18 chrony
5 sync
28 huang
19 apache[root@192 ~]# awk -F: '{username[++x]=$1} END{for(i in username) {print i,username[i]}}' /etc/passwd
35 ji
26 abc
17 sshd
4 adm
36 liangl
27 qian
18 postfix
5 lp
37 han
28 yoa
19 chrony
五、删除数组元素
删除数组元素语法格式 使用 delete 语句来删除数组元素,语法格式如下:delete array_name[index]
删除数组元素 删除数组中的 google 元素(删除命令没有输出):
[root@192 ~]# awk 'BEGIN {
> sites["liang"]="www.liang.com";
> sites["google"]="www.google.com"
> delets sites["google"];
> print fruits["google"]
> }'
六、多维数组
AWK 本身不支持多维数组,不过我们可以很容易地使用一维数组模拟实现多维数组。
模拟二维数组
[root@192 ~]# awk 'BEGIN {
> array["0,0"]=100;
> array["0,1"]=200;
> array["0,2"]=300;
> array["1,0"]=400;
> array["1,1"]=500;
> array["1,2"]=600;
> print "array[0,0]=" array["0,0"];
> print "array[0,1]=" array["0,1"];
> print "array[0,2]=" array["0,2"];
> print "array[1,0]=" array["1,0"];
> print "array[1,1]=" array["1,1"];
> print "array[1,2]=" array["1,2"];
> }'
array[0,0]=100
array[0,1]=200
array[0,2]=300
array[1,0]=400
array[1,1]=500
array[1,2]=600
#实例中,array0 存储 100,array0 存储 200 ,依次类推。要在 array0 处存储 100, 使用: array["0,0"] = 100。使用 0,0 作为索引,这并不是两个索引值,而是一个字符串索引 0,0。
在数组上可以执行很多操作,比如,使用 asort 完成数组元素的排序,或者使用 asorti 实现数组 索引的排序等等。