如何在linux或perl的特定列中将科学记数法更改为数字

Posted

技术标签:

【中文标题】如何在linux或perl的特定列中将科学记数法更改为数字【英文标题】:how to change scientific notation to numeric in a specific column in linux or perl 【发布时间】:2014-07-25 11:36:34 【问题描述】:

我有一个文件如下:

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

谁能帮帮我?非常感谢!!

【问题讨论】:

我们不想为您完成所有工作!这是一个有用的链接:***.com/questions/2474424/… *** 不是要求人们为您编写代码的地方。您应该了解您的问题以及您尝试解决问题的一些代码。然后您可以询问有关您的代码的问题,它没有按预期工作。 【参考方案1】:

这个问题的关键是使用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 模式

【讨论】:

您能否解释一下 spritf() 以及代码中 %.24f 和数字 7 的含义?谢谢 sprintf 和 printf 一样,不同的是,它不打印,而是作为字符串返回。 %.24f 浮点数,小数点后精度为 24。 7print 相同,在 awk 中非零值表示默认操作:打印。 @user3383949

以上是关于如何在linux或perl的特定列中将科学记数法更改为数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中将列数据类型更改为 DOUBLE?

在pandas python中将指数或科学数转换为整数

使用 awk 或 perl 从 CSV 中提取特定列(解析)

如何在 linux 中将 Perl 脚本作为系统守护进程运行?

如何在由科学记数法组成的列表中将字符串更改为 int

如何在 rpart 回归树图中将绘制的数字从科学计数法更改为标准形式?