在不同的列中的字符串后面乘以数字,然后将结果添加到一列

嗨,我需要在不同的列中的字符串后面乘以数字,然后将结果添加到一列中

value=12 value2=5 value3=2

该操作看起来像这样,乘数是由列索引定义的,或者它是否可能由数字前面的字符串定义

value=12*2 value2=5*4 value3=2*7
value=24 + value2=20 + value3=14
value=58
hopehappy502 回答:在不同的列中的字符串后面乘以数字,然后将结果添加到一列

假设提供了索引映射,该映射将列索引映射到给定的乘数,例如

 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
本文链接:https://www.f2er.com/3164958.html

大家都在问