我有一个文件如下:
1 13.00000 12.9999999183917 8.160832898340686E-008 21148294
2 16.00000 15.9999995223584 -4.760327190211910E-007 21148294
3 9.000000 8.99999979262170 2.073783047507050E-007 21148295
我想要这样的输出:
1 13.00000 12.9999999183917 0.0000000816083289340686 21148294
2 16.00000 15.9999995223584 -0.00000004760327190211910 21148294
3 9.000000 8.99999979262170 0.00000002073783047507050 21148295
有人能帮我吗?非常感谢!!
这个问题的关键是使用printf
来控制精度。
您应该给出预期的精度,例如,第一行和第二行中的数字具有不同的精度。你想要哪一个?或者更高的?这是awk
的例子。你自己做一些测试,选择一个合适的。它至少应该给你指明方向,让你开始:
kent$ cat f
1 13.00000 12.9999999183917 8.160832898340686E-008 21148294
2 16.00000 15.9999995223584 -4.760327190211910E-007 21148294
3 9.000000 8.99999979262170 2.073783047507050E-007 21148295
kent$ awk '{$4=sprintf("%.23f",$4)}7' f
1 13.00000 12.9999999183917 0.00000008160832898340686 21148294
2 16.00000 15.9999995223584 -0.00000047603271902119099 21148294
3 9.000000 8.99999979262170 0.00000020737830475070501 21148295
kent$ awk '{$4=sprintf("%.24f",$4)}7' f
1 13.00000 12.9999999183917 0.000000081608328983406864 21148294
2 16.00000 15.9999995223584 -0.000000476032719021190989 21148294
3 9.000000 8.99999979262170 0.000000207378304750705009 21148295
可以改变%.xxf
模式