开发者社区> hopegrace> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

awk数组简介

简介: 一、定义 在 awk 中,数组是关联数组,它的特点是: 1、 数组的下标可以是整数,也可以是负数甚至是字符串 2、 数组的下标可以不连续。 Awk 的变量 IGNORECASE 的值不影响数组下标。
+关注继续查看

一、定义

在 awk 中,数组是关联数组,它的特点是:

1、 数组的下标可以是整数,也可以是负数甚至是字符串

2、 数组的下标可以不连续。

Awk 的变量 IGNORECASE 的值不影响数组下标。

当 awk 创建一个数组的时候,如果没有指定下标,默认已连续整数作为下标,起始值是 1.

Awk 的数组是什么高效的,访问一个元素的时间跟元素的数量无关。

注: awk 的下标其实都是字符串,如我们输入的是数字 1 awk 会自动的转换为字符串“ 1 ”

二、引用元素

引用 awk 元素的基本方法是:

ARRAY[INDEX]

注: 在此引用方式中除非 [ ] 中写的是变量,否则需要添加双引号,即字符串必需添加双引号的规则在数组的下标中也必需遵守,但如果下标是全数字,则可以不加引号,例:

Bb=“123”

arr[bb] awk bb 认作变量,获取的是 arr[“123”] 的值

arr[234] awk 234 认作字符串,虽然 234 没加引号。因为变量的定义不能用全数字,所以 234 肯定是字符串,而不是变量。

arr[“ bb” ] awk bb 认作字符串,获取的是 arr[“bb”] 的值

有时候,数组的 value 会为空。 value 为空的元素包含两种情况 1 、本身 value 为空 2 、通过 delete 删除后的元素。这两种情况都可以被正常引用。但不幸的是,如果引用了一个不存在的元素,会导致 awk 创建这个元素, value 为空,这样,会导致 awk 的内存浪费。

如果要查询具有某个 index 值的元素是否存在可以用如下的表达式:

INDEX in ARRAY

这个表达式仅仅测试具有 INDEX 的元素在 ARRAY 中是否存在。如果不存在,该表达式不会导致产生以 INDEX 为下标的 value 为空的元素。

如果元素存在,该表达式返回值 1 true

反之,返回 0 false

例:测试在数组 frequencies 中是否存在下标为 2 的元素

if (2 in frequencies)

print “Sub 2 is present.”

注: 不能测试 frequencies 中是否存在 value 2 的元素,除非 scan 数组中的所有元素。

三、给元素赋值

给 awk 的数组赋值,只能采用如下形式:

ARRAY[SUB] = VALUE

ARRAY :数组名字

SUB :下标

VALUE :值

注: awk 可以生成下标为空的元素,但是引用方式必需是 arr[ “” ], 而不是 arr[]

length(a) 求得数组中元素的个数。

四、遍历数组

在使用数组的程序里,经常会使用一个循环让数组里的每一个元素都执行一次某一个操作。在其他程序里,数组的下标是连续的正整数,因此所有的下标很容易通过从低到高实现遍历。但这个方法在 awk 里不能使用,因为 awk 的下标可以是数字也可以是字符串。因此, awk 使用一种特别的语句来遍历数组里的元素:

for (VAR in ARRAY)

BODY

以上的循环将实现让数组 ARRAY 里的每一个元素都执行一次 BODY

以下程序的第一部分,将输入文本的每一个单词都作为下标存放入数组,如单词有重复,仅仅保留一个,因数组的下标是不能重复的。

五、删除元素

删除单个元素

delete ARRAY[INDEX]

删除整个数组方法 1

for (VAR in ARRAY)

delete ARRAY[VAR]

删除整个数组方法 2 (该方法 gawk 专用,可移植性差,但效率是方法 1 3 倍左右)

delete ARRAY

Awk 的数组和变量用的是同一个地址空间,数组的名字和变量不能重名。即使数组删除了也不能将名字用于变量命名,以下命令会报错:

a[1] = 3; delete a; a = 3

六、数组赋值

单个赋值: Tarray[1]="cheng mo"  Tarray[2]="800927"

多个赋值:awk 'BEGIN{info="it is a test"; lens=split(info,tA," "); print length(tA), lens, tA[1];}'

原文:

http://blog.csdn.net/xrzs1986/article/details/6261926

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Istio简介及基于ACK安装Istio
了解服务网格开源产品Istio,使用阿里云ACK安装Istio过程
461 0
Fork/Join框架简介
Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。
92 0
Knative 简介
本文作者来自蚂蚁金服系统部之芥 什么是 Knative? knative 是谷歌开源的 serverless 架构方案,旨在提供一套简单易用的 serverless 方案,把 serverless 标准化。
21506 0
ZooKeeper第三方客户端CuratorFramework简介
CuratorFramework监听机制的一些细节
1862 0
Flink之CEP-API简介
CEP API的核心是Pattern API,它允许你快速定义复杂的事件模式。每个模式包含多个阶段(stage)或者我们也可称为状态(state)。为了从一个状态切换到另一个状态,用户可以指定条件,这些条件可以作用在邻近的事件或独立事件上。
2107 0
.tpk格式文件简介
1、.tpk格式的文件是什么?       tpk是ArcGIS10.1推出的一种新的数据文件类型,主要是用于将切片文件打包形成离线地图包,tpk可以在ArcGIS Runtime或者ArcGIS for Android/iOS中作为切片底图被加载。
2605 0
wrk简介
wrk简介 wrk 是一个比较先进的 HTTP 压力测试工具。 测试方法: wrk -t8 -c400 -r10m http://localhost:8080/index.html 原文 http://www.oschina.net/p/wrk
775 0
VTK简介
VTK(Visualization ToolKit)是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行3D计算机图形,图像处理,可视化。 VTK(Visualization ToolKit)是一个开放源码、自由获取的软件系统,全世界的数以千计的研究人员和开发人员用它来进行3D计算机图形,图像处理,可视化。
1350 0
ACWS Framework 简介
-     ACWS Framework 是为开发ACWS结构的应用程序和实现Web Service功能,为方便此类应用开发而设计的一套基础的分布式运算构架。     ACWS Framework是一套吸收C/S结构和B/S结构的基础上作出的,全称为Applicaton Client/Web S...
917 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载