侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

AWK(3)之处理数组

zze
zze
2019-12-25 / 0 评论 / 0 点赞 / 401 阅读 / 2403 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。

为了在单个变量中存储多个值,许多编程语言都提供数组。gawk 编程语言使用关联数组提供数组功能。
关联数组跟数字数组不同之处在于它的索引值可以是任意文本字符串。你不需要用连续的数字来标识数组中的数据元素。相反,关联数组用各种字符串来引用值。每个索引字符串都必须能够唯一地标识出赋给它的数据元素。如果你熟悉其他编程语言的话,就知道这跟散列表和字典是同一个概念。

定义数组变量

可以用标准赋值语句来定义数组变量。数组变量赋值的格式如下:

var[index] = element

其中 var 是变量名,index 是关联数组的索引值,element 是数据元素值。下面是一些 gawk 中数组变量的例子。

capital["Illinois"] = "Springfield"
capital["Indiana"] = "Indianapolis"
capital["Ohio"] = "Columbus"

在引用数组变量时,必须包含索引值来提取相应的数据元素值。

$ gawk 'BEGIN{
> capital["Illinois"] = "Springfield";
> print capital["Illinois"];
> }'
Springfield

在引用数组变量时,会得到数据元素的值。数据元素值是数字值时也一样。

$ gawk 'BEGIN{
> arr[1]=2;
> arr[2]=3;
> print arr[1]+arr[2];
> }'
5

正如你在该例子中看到的,可以像使用 gawk 程序中的其他变量一样使用数组变量。

遍历数组变量

关联数组变量的问题在于你可能无法知晓索引值是什么。跟使用连续数字作为索引值的数字数组不同,关联数组的索引可以是任何东西。
如果要在 gawk 中遍历一个关联数组,可以用 for 语句的一种特殊形式。

for (var in array)
{
    statements
}

这个 for 语句会在每次循环时将关联数组 array 的下一个索引值赋给变量 var,然后执行一遍 statements。重要的是记住这个变量中存储的是索引值而不是数组元素值。可以将这个变量用作数组的索引,轻松地取出数据元素值。

$ gawk 'BEGIN{
> arr["a"]=11;
> arr["b"]=12;
> arr["c"]=13;
> for(i in arr){
> print "Index:",i,"Value:",arr[i];
> }
> }'
Index: a Value: 11
Index: b Value: 12
Index: c Value: 13

注意,索引值不会按任何特定顺序返回,但它们都能够指向对应的数据元素值。明白这点很重要,因为你不能指望着返回的值都是有固定的顺序,只能保证索引值和数据值是对应的。

删除数组变量

从关联数组中删除数组索引要用一个特殊的命令。

delete array[index]

删除命令会从数组中删除关联索引值和相关的数据元素值。

$ gawk 'BEGIN{
> var["a"]=1;
> var["g"]=2;
> for(i in var){
>     print "Index:",i," - Value:",var[i];
> }
> delete var["g"];
> print "---";
> for(i in var){
>     print "Index:",i," - Value:",var[i];
> }}'
Index: a  - Value: 1
Index: g  - Value: 2
---
Index: a  - Value: 1

一旦从关联数组中删除了索引值,你就没法再用它来提取元素值。

0
AWK

评论区