在 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 中将指数转换为整数的主要内容,如果未能解决你的问题,请参考以下文章