Как AWK может выполнять арифметику массивов? - PullRequest
0 голосов
/ 07 февраля 2009

Я хочу перейти от Excel к Awk. Мне нужны базовые математические операции, такие как сложение и деление, для массивов.

Например, массивами A и B являются [1, 3, 2] и [2, 1, 2] соответственно. Как я могу получить массив [2, 3, 4] из умножения между A и B? А как насчет сложения и деления между А и В?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2009

Я думаю, что 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 здесь .

2 голосов
/ 07 февраля 2009

В awk «массивы» являются ассоциативными. То есть они являются хешами, индексированными не непрерывной строкой чисел, а произвольными входными значениями. Таким образом, вы можете делать такие вещи, как

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

если вы знаете, что элементы с числовым индексом существуют, или вы можете сделать что-то вроде:

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

Но обработка массива на самом деле не является сильной стороной awk, и я бы посоветовал внимательно посмотреть на то, что с этим связано, прежде чем совершать оптовую продажу этого курса.

Возможно, вам лучше использовать python или другой достаточно современный язык быстрой разработки.

Кстати, я написал свой первый нетривиальный фрагмент кода в python на прошлой неделе, и я полностью заинтересован. После случайных воздействий tcl и perl я очень сильно расстроился из-за ценности этих инструментов. Я думаю python сделает из меня верующего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...