`awk` - 在使用科学记数法时定义指数的位数
`awk` - define number of digits in exponent when using scientific notation
我使用科学计数法输入数据(制表符分隔)
-2.60000000E-001 -2.84200000E-011 1.00000000E+000 2.45060000E-010 0.00000000E+000 -1.98000000E-012
使用 awk
,我正在提取一些列并对另一列进行数学运算。为了确保格式符合需要,应用了 printf:
awk '{ printf "%9.8E\t%9.8E\n", ,sqrt() }' infile.dat
但是在我的输出中,指数的位数从 3 变为 2:
-3.00000000E-01 1.90446843E-05
如何在 printf 语句中定义这些,以便获得所需的输出:
-3.00000000E-001 1.90446843E-005
printf 使用 stdio,这不提供设置指数长度的方法。所以你需要运行你自己的。
awk 'BEGIN{
v="-3.00000000E-01 "
v=gensub("E([+-])([0-9][0-9]) ","E\10\2","",v )
print v
exit}'
这会将值放入变量 v,然后应用替换来搜索指数,如果它在 2 个位置,则添加 0。如果它已经在 3 个位置,则不添加任何内容。
gensub 仅在 gawk 中可用
我使用科学计数法输入数据(制表符分隔)
-2.60000000E-001 -2.84200000E-011 1.00000000E+000 2.45060000E-010 0.00000000E+000 -1.98000000E-012
使用 awk
,我正在提取一些列并对另一列进行数学运算。为了确保格式符合需要,应用了 printf:
awk '{ printf "%9.8E\t%9.8E\n", ,sqrt() }' infile.dat
但是在我的输出中,指数的位数从 3 变为 2:
-3.00000000E-01 1.90446843E-05
如何在 printf 语句中定义这些,以便获得所需的输出:
-3.00000000E-001 1.90446843E-005
printf 使用 stdio,这不提供设置指数长度的方法。所以你需要运行你自己的。
awk 'BEGIN{
v="-3.00000000E-01 "
v=gensub("E([+-])([0-9][0-9]) ","E\10\2","",v )
print v
exit}'
这会将值放入变量 v,然后应用替换来搜索指数,如果它在 2 个位置,则添加 0。如果它已经在 3 个位置,则不添加任何内容。
gensub 仅在 gawk 中可用