bash - 为什么 awk 将指数转换为普通整数?

标签 bash awk

这可能是关于awk处理指数的一个非常基本的问题。

我的输入行是:

1.047788047990001417e+02 2.931134551062188009e+01 3.669999999999999929e+00

我想在第三个位置添加 -1000,但采用指数格式,所以首先我转换格式。

dept=$(echo -1000 | awk '{printf "%.7e\n", $1}')

但是当我尝试使用 catawk 将其插入到上面的行中时,它会转换回正常整数。

cat $line | awk '{print $1 ,$2 ,'$dept', $3}'

我得到了这个输出:

1.048020560949027811e+02 2.976214868620721887e+01 -1000 6.065999999999999837e+00

请您指出我哪里做错了或者我该如何纠正? 除此之外,是否有任何选项可以限制e之前的7位小数?

例如理想预期输出应该是这样的:

1.0480205e+02 2.9762148e+01 -1.0000000e+03 6.0659999e+00

最佳答案

默认情况下,即使您使用指数表示法输入整数,也会将整数打印为整数。如果您希望对其进行格式化,请使用printf()

cat "$line" | awk -v dept=-1.0000000e+03 '{printf("%e %e %e %e\n", $1, $2, dept, $3)}'

使用 -v 选项将 shell 变量转换为 awk 变量,而不是将该变量替换到 awk 脚本中。

关于bash - 为什么 awk 将指数转换为普通整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71851572/

相关文章:

linux - 将文件分组并通过管道传输到 awk 命令

linux - 为什么子目录中的文件没有被复制?

bash - 如何检查文件名是否与 shell 脚本中的正则表达式匹配

python - 卸载旧版本并安装新版本后运行新 Python 版本时出现问题 (MAC)

string - 如何将字符串拆分为变量/参数以传递给另一个脚本?

linux - Bash:如何缩短日志文件的长行,同时保持每行开头和结尾的字符数固定?

bash - 两个进程之间的信号乒乓

linux - 如何使用 awk 创建包含字段范围的 csv 文件

bash - Unix 验证文件没有内容和空行

awk 只保留逗号分隔字段的第一个和最后一个值