умножить числа после строки в разных столбцах, а затем добавить результаты в один столбец - PullRequest
0 голосов
/ 04 ноября 2019

Привет! Мне нужно умножить числа после строки в разных столбцах, а затем добавить результаты в один столбец.

value=12 value2=5 value3=2

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

value=12*2 value2=5*4 value3=2*7
value=24 + value2=20 + value3=14
value=58

1 Ответ

1 голос
/ 04 ноября 2019

Предполагается, что предоставляется индексная карта, которая отображает индекс столбца с заданным множителем, например,

 1 -> 2
 2 -> 4 
 3 -> 7

попробуйте использовать этот скрипт или следующий «однострочный» (возможно, не самый элегантный код):

#!/bin/bash
INPUT="value=12 value2=5 value3=2"
m=(2 4 7)

IFS=' ' read -ra IN <<< "$INPUT"
for ((i=0; i<${#IN[@]}; ++i)); do
  tmp=${IN[$i]}
  sum=$((sum + $(awk -F '=' -v m="${m[$i]}" '{print m*$2}' <<< ${tmp##value})))
done
echo $sum

"Однострочник":

awk -F ' ' 'BEGIN {m[1]=2; m[2]=4; m[3]=7;} {for (i=1; i <= NF; i++) {split($(i),a,"="); sum+=m[i] * a[2];}} END { print sum; } ' <<< "value=12 value2=5 value3=2"

Предполагается, что в первом столбце есть множитель 2, если не указан, и затем по возрастанию num+1 на основе числа num слева от знака уравнения, здесь быстрое решение:

INPUT="value=12 value2=5 value3=2"
IFS=' ' read -ra IN <<< "$INPUT"
sum=0
for i in "${IN[@]}"; do
  sum=$((sum + $(awk -F '=' '{print (!$1 ? 2 : $1+1) * $2}' <<< ${i##value})))
done
echo $sum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...