BASH 脚本中包含元组的两个变量的乘法

Multiplication of two variables containing tuples in BASH script

我有两个变量包含从 PostgreSQL 数据库生成的相同长度的元组和几个成功的后续计算,我想将它们相乘以生成包含答案元组的第三个变量。每个元组包含 100 个数字记录。变量 1 称为 rev_p_client_pa,变量 2 称为 lawnp_p_client。我尝试了以下给了我第三个元组但答案行计算不正确:

rev_p_client_pa数据为:

0.018183
0.0202814
0.013676
0.0134083
0.0108168
0.014197
0.0202814

lawn_p_client数据为:

52.17
45
30.43
50
40
35
50

我在脚本中使用的命令:

awk -v var3="$rev_p_client_pa" 'BEGIN{print var3}' | awk -v var4="$lawnp_p_client" -F ',' '{print $(1)*var4}'

该命令给出以下输出:

0.948607
1.05808
0.713477
0.699511
0.564312
0.740657
1.05808

然而,当在 libreoffice calc 中手动计算时,我得到:

0.94860711
0.912663
0.41616068
0.670415
0.432672
0.496895
1.01407

我在之前的计算中使用这个 awk 结构将元组变量与数值变量相乘,并且计算正确。有人知道应该如何编写正确的 awk 语句,或者您有其他一些有用的想法吗?感谢您的帮助。

使用paste将两个数据集连接在一起,形成一对列表,每对由制表符分隔。 然后将结果通过管道传递给 awk 以将每对数字相乘,从而生成产品列表。

#!/bin/bash

rev_p_client_pa='0.018183
0.0202814
0.013676
0.0134083
0.0108168
0.014197
0.0202814'

lawn_p_client='52.17
45
30.43
50
40
35
50'

paste <(echo "$rev_p_client_pa") <(echo "$lawn_p_client") | awk '{print *}'

输出:

0.948607
0.912663
0.416161
0.670415
0.432672
0.496895
1.01407

所有 awk:

$ awk -v rev_p_client_pa="$rev_p_client_pa" \
      -v lawn_p_client="$lawn_p_client" '        # "tuples" in as vars
BEGIN {
    split(lawn_p_client,l,/\n/)                  # split the "tuples" by \n
    n=split(rev_p_client_pa,r,/\n/)              # get count of the other
    for(i=1;i<=n;i++)                            # loop the elements
        print r[i]*l[i]                          # multiply and output
}'

输出:

0.948607
0.912663
0.416161
0.670415
0.432672
0.496895
1.01407