我对 Unix 很陌生,正在尝试学习基本的awk
脚本——在此期间我不断遇到“数组”和“关联数组”这个词。我不知道这是什么;不要告诉我 RTFM 因为我已经阅读了所有可能的书面解释,我根本不明白他们在说什么。(我几乎不明白什么是变量)。
有人可以用清晰简单的愚蠢语言(如果您使用计算机语言,请定义术语)为非计算机人员解释一下吗?
什么是数组?为什么我需要使用一个?如何使用数组或表达一个awk 脚本中的任何内容?
数组使用数字进行索引,它们通常从 0 开始,到 N-1 数组中的元素数。
关联数组是一个键值对,通常称为散列。不是使用固定整数来索引数组,而是使用值、字符串来标识关联数组中的每个元素。
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 个月。数组非常适合存储这些值。将它们存储在数组中允许程序员将它们作为一组相关的事物来处理。如果我只是将它们存储在变量中,如果说我想将它们从华氏温度转换为摄氏温度,那么编写代码来对集合进行操作会困难得多。
此外,您可以使用这种类型的数据结构免费获得元数据。它们自动包含其中的元素数,因此如果我需要找出当月收集了多少个值,我只需找出数组的“大小”,或者计算其中的元素数,获取这些信息。