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

发布时间:2023年12月29日

一、前言

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

?

?

?

?

文章来源:https://blog.csdn.net/weixin_73783595/article/details/135299482
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。