在Bash中将指数转换为整数

时间:2014-06-19 18:20:04

标签: bash integer exponent

我想将文本文件中的一些时间戳从指数转换为整数。问题是在文件中已经存在十进制数列和我不想更改的列。我发现这个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

1 个答案:

答案 0 :(得分:2)

您尚未将输入字段分隔符设置为逗号,因此整个记录将作为单个字符串读取,%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