在 Bash 中将指数转换为整数

Posted

技术标签:

【中文标题】在 Bash 中将指数转换为整数【英文标题】:Converting exponents to integers in Bash 【发布时间】:2014-06-19 18:20:03 【问题描述】:

我想将文本文件中的一些时间戳从指数转换为整数。问题是文件中已经有十进制数字的列和我不想更改的列。我发现这个thread OP 有一个非常相似的问题,我想出了这个代码:

awk 'printf "%13.0f,%5.2f,%5.2f,%5.2f,%5.2f,%10.0f",$1,$2,$3,$4,$5,$6; print 

"\n" foo.csv

但是,代码可以很好地转换我的时间戳,然后将所有其他数字转换为 0,如下所示:

`1391470000000,0.00,0.00,0.00,0.00,0000000000
 1391380000000,0.00,0.00,0.00,0.00,0000000000`

我做错了什么?

编辑:

我输入的数字,foo.csv:

1.39147e+12,56.32,57.88,56.09,57.81,2911900000
1.39138e+12,58.15,58.48,56.08,56.15,2929300000

【问题讨论】:

例如请给出您输入的数字。 你能给出 csv 文件中的一行作为输入示例吗? 您应该在printf 格式字符串中包含换行符,而不是添加第二条打印语句。 【参考方案1】:

您尚未将输入字段分隔符设置为逗号,因此整个记录被读取为单个字符串,%13.0f 格式仅转换第一部分(直到第一个逗号)。其余字段(2 到 6)为空,因此等于 0。试试:

awk -F, 'printf "%13.0f,%5.2f,%5.2f,%5.2f,%5.2f,%10.0f\n",$1,$2,$3,$4,$5,$6 foo.csv

或许:

awk -F, -v OFS=, '$1 = sprintf("%13.0f", $1); print' foo.csv

【讨论】:

就是这样。谢谢!

以上是关于在 Bash 中将指数转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中将指数和系数转换为整数值

在 bash/perl 中将科学记数法转换为十进制(不是整数)

如何将证书转换为十进制模数和指数

如何在 Python 中将负指数数转换为十进制数?

在python中将指数形式的数字转换为十进制形式[重复]

在 bash 中将 CSV 转换为 JSON