У меня есть выход из сценария thescript
, который гласит:ОСУЩЕСТВЛЕНИЮ `sumproduct` в UNIX оболочки
202 1 0 1 0 0 0
Теперь я хочу, чтобы выборочно просуммировать число с awk
, в зависимости от стоимости ${SUM_MASK}
:
SUM_MASK=1,1,0,0,0,0,0
Я хотел бы иметь что-то вроде:
thescript | awk <SOMETHING>
где выход каждое число thescript
умножается на соответствующее число в ${SUM_MASK}
, получение:
203
как результат: 203 = 202 * 1 + 1 * 1 + 0 * 0 + 1 * 0 + 0 * 0 + 0 * 0 + 0 * 0
Это было бы похоже на функцию sumproduct
в программном обеспечении для работы с электронными таблицами.
Следующие snipets код сделать трюк, но я хотел бы избежать использования подстановки процессов:
SUM_MASK="1,1,0,0,0,0,0"; paste <(thescript) <(echo ${SUM_MASK} | tr ',' '\n') | awk '{ SUM += $1 * $2 } END { print SUM }'
и именованные каналы:
SUM_MASK="1,1,0,0,0,0,0"; mkfifo fA; mkfifo fB; thescript > fA & echo ${SUM_MASK} | tr ',' '\n' > fB & paste fA fB | awk '{ SUM += $1 * $2 } END { print SUM }' > result.text; rm -f fA fB
, как я мог бы достичь этого?
Зачем вам 'awk' для этого? –
Я предполагаю, что число элементов не всегда фиксировано в 7? –
BTW, я бы подумал взять оба входа из командной строки вашей функции или скрипта и объединить формат (чтобы разрешить либо пробелы *, либо * запятые для обоих, например). Для читателя немного неочевидно, почему был выбран выбранный вами вызов (с одним аргументом, взятым из предопределенной переменной, а другой из stdin). –