在 gawk + ​​gensub 中解析数学表达式

Parsing math expression in gawk + gensub

我尝试找到所有科学记数法的数字并将它们替换为它们的浮点数:

gawk -F' ' '
    BEGIN {
    OFMT = "%.0f"
    data = "\
    6.54321e2\n\
    6.543212\n\
    .\n\
    454.\n\
    c. 5.54321e2\n\
    5.54321e2 1.54321e3\n\
    4.54321e2 8.34e+4\n\
    4.543212 5.54321e2\n\
    3.23e3"
    regex = "([0-9]+).([0-9]+)e([0-9]+)"
    output = gensub(regex, "\1.\2e\3", "G", data)
    printf("%.3f", output)
    }' ""

print b 替换 printf("%.3f", output) 似乎工作正常,它找到的数字被替换,但是 printf 参数 output 没有被解析。 strtonum() 没有任何改变,我是不是漏掉了什么?

正如你在最后看到的,我在脚本参数 </code> 下分配文件时也遇到了问题。我应该在 <code>data 之类的变量中指向文件,还是在 gensub().

中明确指向文件

在此先感谢您的帮助:)

不确定 </code> 的用途,但您可以执行以下操作</p> <pre><code>echo "data contents here" | awk '{for(i=1;i<=NF;i++) if($i+0==$i) $i=sprintf("%.3f",$i)}1'

或者将你的数据放在一个文件中并使用

awk '{for(i=1;i<=NF;i++) if($i+0==$i) $i=sprintf("%.3f",$i)}1' file 

它会将白色正常化 space 作为副作用。