我有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 个小数位......
如果您的 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)