将两个文件的值相乘 - 但保留小数位

R 9*_*000 0 awk shell-script

我有file1.txt

0.1234
0.333
0.22
0.1
Run Code Online (Sandbox Code Playgroud)

文件2.txt

2
10
100
100
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个命令,该命令可以将各行相乘,并输出与 file1.txt 在此位置/行一样多的小数位。 输出.txt

0.2468
3.330
22.00
10.0
Run Code Online (Sandbox Code Playgroud)

到目前为止我使用这个命令: paste file1.txt file2.txt | awk '{printf "%.4f", ($1 * $2)}' > output.txt 但是当然“%.4f”总是产生 4 个小数位......

ste*_*ver 5

如果您的 awk 实现提供对底层 C 库的动态宽度和精度功能的访问,并且 中的数字file1.txt永远不能包含尾数指数表示,例如1.23e4,那么您可以执行类似的操作

$ paste file1.txt file2.txt | 
  awk '{split($1,a,/[.]/); printf "%.*f\n", length(a[2]), ($1 * $2)}'
0.2468
3.330
22.00
10.0
Run Code Online (Sandbox Code Playgroud)

或者也许更稳健一些

paste file1.txt file2.txt | 
  awk '{l = (match($1,/[.][[:digit:]]+/) > 0) ? RLENGTH-1 : 0; 
  printf "%.*f\n", l, ($1 * $2)
}'
Run Code Online (Sandbox Code Playgroud)