AWK如何做阵列算术?

时间:2009-02-07 02:15:21

标签: arrays awk math

我想从Excel转移到Awk。我需要对数组进行基本的数学运算,例如加法和除法。

例如,阵列A和B分别是[1,3,2]和[2,1,2]。如何从A和B之间的乘法中得到一个数组[2,3,4]? A和B之间的加法和划分怎么样?

2 个答案:

答案 0 :(得分:3)

我认为awk没有为这种数字工作做过。它更适用于文本处理。 awk中的数组是关联的和稀疏占用的(其索引之间可能有“漏洞”)。您使用字符串来索引它们:

for(int j=0; j<length(A) && j<length(B); j++)
    C[j] = A[j] * B[j]

它就像一个哈希图。所以,在awk中你可以做到

A[100] = 10;
A[1] = 2;

并且只有2个元素存储在该数组中(2到99之间的元素不存在),由通过转换数字100和1创建的字符串索引.GNU Awk手册有一个很好的关于awk中数组的部分{ {3}}。

答案 1 :(得分:2)

awk“数组中”是关联的。也就是说,它们的哈希值不是由连续的数字串索引,而是由任意输入值索引。所以你可以做像

这样的事情
for (i=0; i<3; i++){
   c[i] = a[i] * b[i];
};

如果您知道数字索引元素存在,或者您可以执行以下操作:

d["sam"] = a[3] + b["dog"];

但阵列处理确实不是awk的强项,我建议在批量学习这门课程之前仔细看一下所涉及的内容。

使用python或其他相当现代的快速开发语言可能会更好。

BTW--我上周在python写了我的第一个非平凡的代码,我完全被迷住了。在偶尔接触到tclperl之后,我对这些工具的价值非常怀疑。我认为python会使我成为一个信徒。