文章目录
这个是我自己写的 全部关于 awk学习的目录导航 ,感兴趣的可以看看。
关于 数组,有的人很熟悉,然而有的人却很陌生,什么叫数组以及数组相关的概念?
什么是数组?
数组: 简单来说就是 多个具有相同类型 的所有数据的一个集合!
数组下标: 用来 区分或指定 数组中每一个数的位置!
语法:<数据类型> <数组名>[<表达式>]
假如你还是不懂,举个简单的例子:
数组 你可以把它当成一个篮球队!同一个篮球队的就可以当成一个数组!然后该篮球队的队友如何区分?当然是通过队服上的号码了!(相当于数组下标)这样是不是特别通俗易懂!
数组中的四种基本数据结构:
1、集合:
数据元素间,除了 同属于一个集合 外,并没有其他关系。相当于一个班里的同学,除了都属于一个班,其他的都是很独立的!
2、线性结构(一对一):
班级里的同学本来没有先后顺序,但是当我们给他安排了学号之后,这样他们就按着学号来排名了!1号、2号…n号。基本上都使用此结构!
3、树形结构(一对多):
这个就是相当于一个公司,最上面是老板啊、老板下面是各部门经理啊、经理下面是员工啊…等等
4、图状结构(多对多):
为什么要用数组?
在编程中,如果我们有 10个、100个 相同数据类型的数据,那我们难道需要写100个变量吗?难道需要记住100个变量名吗???这样也太废头了吧!这个时候就体现出 数组的作用了!!!
一维数组:
所谓 一维数组,就是 只有一个下标的数组! 它在计算机的 内存 中是 连续存储 的!
一维数组的语法格式:
<存储类型> <数据类型> <数组名>[<表达式>]
数据类型: 整数型(int、long、short)
字符型(char)
浮点型(float、double)
下标: 数组元素在内存中是 连续存放 的,每个元素都有一个 序号,称为 下标,数组中的下标是从 0 开始的连续整数,所以最大取值为 数组元素个数 减 1!!!
[ ]: 是下标运算符,具有 最高的运算优先级 。
举个栗子:
char a[10]
说明了 一个含有10个元素的 数组名为:a
具体的数组元素为:
a[0]、a[1]… …a[9]
为什么是到9呢?因为咱们说过 他是从0开始计数的!这些元素的类型都为 char,在内存中他们是连续存放的。
这里我就简单了解一下数组,具体的我也不清楚,二维数组…多维数组等等,慢慢学习吧!
那么 ,回到我们的正题,在 awk 中可以使用数组吗?答案是当然可以,不然我写这篇文章做什么?
awk 中声明数组:
在其他语言中,你可能习惯的提前声明数组,但是在 awk 中不需要提前声明,直接为 数组中的元素赋值即可!而且 awk 中使用 “数字下标” 的时候,默认是以 1 开始,并不是以0 开始,这里是因为一个函数(split),这边会在函数中提到具体为什么,以及如何使用。
但是对于我这样的一个初学者来说,这不就是一个简单的变量赋值吗?这还得一个一个的敲,并没有使用到数组的整体变量赋值啊。慢慢的带着我的疑问继续学习下去…
数组的元素设置:
数组的元素设置为空 是允许的! 当你判断某个元素是否存在的时候,不应该看他数组元素是不是为空!
当一个元素不存在于数组 的时候,如果我们直接引用此不存在的数组元素,那么awk会自动创建这个元素并默认为此元素赋值为“空字符串”。
示例如下:
那么,如何判断一个数组中元素是否存在呢?
delete —— 删除数组元素:
使用 for 循环:
在上一篇文章中,提到了关于 for循环 的两个语法,这里来说一下关于数组的语法结构:
语法格式1:
for (初始化;布尔表达式;表达式){
语句1…
语句2…
}
语法格式2:
for (变量 in 数组名){
语句1…
语句2…
}
注意: 两种 for 循环都可以遍历输出数组中的元素,但是 语法格式1 只能输出数字作为下标的数组!其中 变量循环的就是数组的下标!
你也可以很清楚的看见,这里可以使用 语法格式1 是因为使用了 for 循环中 变量 “i” 与数组下标 都是数字 的原因,按照顺序输出了数组中的元素值 !那么要是数组的下标为 字符串 怎么办呢?那就该用 语法格式2 了!
注意: 这个语法里的 “i” 表示的是数组的下标!并不是表示元素的值。要想输出元素的值,就使用 语法格式1 。
数字下标 与 字符串下标
从上图很明显的就可以看出使用 字符串作为下标 的时候,元素值输出的顺序 与 元素值在数组中的顺序 是 不一样 的!
这是因为:awk 中的数组本质 上就是 关联数组,所以 默认打印出的元素就是无顺序的!但是,咱们知道,“数字下标”虽然看着是数字,但是最终也会被转换为“字符串”,那么它本质上也是关联数组,既然都属于关联数组,那么为什么使用数字下标的时候,输出的元素值都是相互对应的呢?
这就是使用 数字下标 的优势,是因为 变量 “i” 为 数字 的时候,由于 for 循环 的原因, “i” 是按照顺序递增的,所以当 “i” 的值 与 下标的值 相同的时候,就可以根据下标的顺序输出对应元素的值!
但是,即使使用 数字下标 ,如果你使用 第二种 for循环语法 ,也无法按照顺序输出:
虽然我这边做了好几回实验,但是结果还是按照顺序输出,但是我看很多大佬的博客都是无顺序输出,这里我还有有点懵B,如果哪位大佬有借鉴可以在下面评论给我讲解一下吗?麻烦您了 非常感谢,我是纯小白,写这些也不是为了误人子弟,因为我都自己边做实验边写。,在这里附上其他大佬的图: