2009-02-07 50 views
0

我想从Excel转移到Awk。我需要数组的基本数学运算,例如加法和除法。AWK如何做数组运算?

例如,数组A和B分别是[1,3,2]和[2,1,2]。如何从A和B之间的乘法中获得一个数组[2,3,4]? A和B之间的加法和分割是什么?

+0

不要为此学习awk,而是学习Perl。但是不要学习Perl,而是学习Python。当你需要处理超过200行的程序时,你的大脑会感谢你。 (说长时间的Perl程序员。) – 2009-02-07 03:04:15

回答

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 here中有关于数组的一个很好的部分。

2

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

for (i=0; i<3; i++){ 
    c[i] = a[i] * b[i]; 
}; 

,如果你知道数字索引的元素存在,或者你可以做这样的事情:

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

但阵列处理还真是不awk的实力,我建议仔细研究在批发本课程之前涉及的内容。

python或另一种相当现代化的快速开发语言可能会更好。

顺便说一句 - 上周我在python上写了我的第一个不重要的代码,我完全迷上了。偶尔接触到tclperl后,我真的很想知道这些工具的价值。我认为python会让我相信。