我尝试用科学记数法找到所有数字,并将它们替换为等效的浮点数:
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)
}' "$1"
用printf("%.3f", output)
替换print b
似乎工作正常,它找到的数字被替换,但是printf参数output
未被解析。 strtonum()
没有改变任何东西,我错过了什么吗?
正如您在最后看到的那样,我在使用脚本参数$1
分配文件时也存在问题。我应该像data
之类的变量一样指向文件,还是gensub()
中明确指出。
提前感谢您的任何帮助:)
答案 0 :(得分:0)
不确定$1
的用途,但您可以执行以下操作
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
它会将白色空间标准化为副作用。