Shell三剑客:awk(awk编辑编程)五

一、前言

  • 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 实现数组 索引的排序等等。 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值