这可能是关于awk处理指数的一个非常基本的问题。
我的输入行是:
1.047788047990001417e+02 2.931134551062188009e+01 3.669999999999999929e+00
我想在第三个位置添加 -1000,但采用指数格式,所以首先我转换格式。
dept=$(echo -1000 | awk '{printf "%.7e\n", $1}')
但是当我尝试使用 cat 和 awk 将其插入到上面的行中时,它会转换回正常整数。
cat $line | awk '{print $1 ,$2 ,'$dept', $3}'
我得到了这个输出:
1.048020560949027811e+02 2.976214868620721887e+01 -1000 6.065999999999999837e+00
请您指出我哪里做错了或者我该如何纠正? 除此之外,是否有任何选项可以限制e之前的7位小数?
例如理想预期输出应该是这样的:
1.0480205e+02 2.9762148e+01 -1.0000000e+03 6.0659999e+00
最佳答案
默认情况下,即使您使用指数表示法输入整数,也会将整数打印为整数。如果您希望对其进行格式化,请使用printf()
。
cat "$line" | awk -v dept=-1.0000000e+03 '{printf("%e %e %e %e\n", $1, $2, dept, $3)}'
使用 -v
选项将 shell 变量转换为 awk 变量,而不是将该变量替换到 awk 脚本中。
关于bash - 为什么 awk 将指数转换为普通整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71851572/