在 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 作为副作用。
我尝试找到所有科学记数法的数字并将它们替换为它们的浮点数:
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 作为副作用。