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
我有两个变量包含从 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