awk 中的数组是什么?

Müt*_*Müt 3 array awk

我对 Unix 很陌生,正在尝试学习基本的awk脚本——在此期间我不断遇到“数组”和“关联数组”这个词。我不知道这是什么;不要告诉我 RTFM 因为我已经阅读了所有可能的书面解释,我根本不明白他们在说什么。(我几乎不明白什么是变量)。

有人可以用清晰简单的愚蠢语言(如果您使用计算机语言,请定义术语)为非计算机人员解释一下吗?

什么是数组?为什么我需要使用一个?如何使用数组或表达一个awk 脚本中的任何内容

slm*_*slm 7

什么是数组?

数组使用数字进行索引,它们通常从 0 开始,到 N-1 数组中的元素数。

什么是关联数组?

关联数组是一个键值对,通常称为散列。不是使用固定整数来索引数组,而是使用值、字符串来标识关联数组中的每个元素。

Unix 中的数组

Unix 中的许多工具都使用数组(两种类型)。AWK 和 Bash 是 2,如果您进行任何脚本编写工作,您可能会看到它们都被使用。Perl、Python 和 Ruby 等编程语言也有这些数据类型。

您可以查看此页面,其中显示了 AWK 中两种类型数组的示例,标题为:AWK Arrays Explained with 5 Practical Examples

例子

数组脚本 - array.awk

$ cat array.awk 
#!/usr/bin/awk -f

BEGIN{
some_array[1] = "Hello"
some_array[2] = "Everybody"
some_array[3] = "!"
print some_array[1], some_array[2], some_array[3]
}
Run Code Online (Sandbox Code Playgroud)

示例运行:

$ ./array.awk 
Hello Everybody !
Run Code Online (Sandbox Code Playgroud)

关联数组 - assoc_arr.awk

$ cat assoc_arr.awk 
#!/usr/bin/awk -f

BEGIN{
  debts["Kim"] = 50
  debts["Roberto"] += 70
  debts["Vic"] -= 30
  print "Vic paid 30 dollars, but still owes", debts["Vic"]
}
Run Code Online (Sandbox Code Playgroud)

示例运行:

$ ./assoc_arr.awk 
Vic paid 30 dollars, but still owes -30
Run Code Online (Sandbox Code Playgroud)

为什么我需要使用一个?

数组(两种类型)在处理相关数据集时非常有用。如果我有一个城市的一堆温度测量值,比如 1 个月。数组非常适合存储这些值。将它们存储在数组中允许程序员将它们作为一组相关的事物来处理。如果我只是将它们存储在变量中,如果说我想将它们从华氏温度转换为摄氏温度,那么编写代码来对集合进行操作会困难得多。

此外,您可以使用这种类型的数据结构免费获得元数据。它们自动包含其中的元素数,因此如果我需要找出当月收集了多少个值,我只需找出数组的“大小”,或者计算其中的元素数,获取这些信息。

参考