You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何将文本中的科学计数法转换为普通数字?

Linux下将文本中的科学计数法转换为普通数字

问题描述

现有文本文件内容如下:

AXN1 6.9e+07 69000000
AXN2 7.2e+07 72000000
AXN2 81000000 81000000
AXN3 1.18e+08 118000000
AXN4 7.7e+07 77000000
AXN9 8e+07 80000000
AXN11 800000 800000
AXN11 2.9e+07 29000000
AXN12 48000001 48000001
AXN18 4.8e+07 48000000

需要将其中的科学计数法转换为普通数字,得到如下结果:

AXN1 69000000 69000000
AXN2 72000000 72000000
AXN2 81000000 81000000
AXN3 118000000 118000000
AXN4 77000000 77000000
AXN9 80000000 80000000
AXN11 800000 800000
AXN11 29000000 29000000
AXN12 48000001 48000001
AXN18 48000000 48000000

解决方法

方法1:使用awk处理

awk可以直接识别科学计数法数值,通过格式化输出转换为整数:

awk '{printf "%s %d %d\n", $1, $2, $3}' input.txt > output.txt

说明:awk会自动将$2、$3字段的科学计数法数值转换为数值类型,再用%d格式符输出十进制整数,保留原始字符串字段$1。如果目标数值存在小数部分,%d会自动取整;若需保留小数,可替换为%f并指定精度。

方法2:使用sed配合bc计算

针对更复杂的科学计数法场景,可通过sed匹配目标格式后调用bc求值:

sed -E 's/([0-9]+\.?[0-9]*e[+-][0-9]+)/echo "scale=0; \1" | bc -l/e' input.txt > output.txt

说明:sed的e标记会将替换内容作为系统命令执行。正则表达式匹配科学计数法格式的字符串,通过bc -l计算其整数结果(scale=0指定取整),替换原科学计数法内容。

方法3:使用perl处理

perl通过正则匹配与数值转换函数实现转换:

perl -pe 's/([0-9.e+-]+)/int($1)/ge' input.txt > output.txt

说明:正则匹配所有科学计数法格式的数值,int()函数将其转换为整数;g标记表示替换每行所有匹配项,e标记表示将替换内容作为perl代码执行。


内容的提问来源于stack exchange,提问作者Alegría

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:10:31