Regex 在gawk+gensub中解析数学表达式
我试图找到科学记数法中的所有数字,并将它们替换为等效的浮点:Regex 在gawk+gensub中解析数学表达式,regex,bash,awk,printf,gawk,Regex,Bash,Awk,Printf,Gawk,我试图找到科学记数法中的所有数字,并将它们替换为等效的浮点: 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
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的输出替换为printb似乎可以正常工作,找到的数字被替换,但是printf参数输出没有得到应有的解析。斯特努姆没有改变什么,我是不是错过了什么
正如您在最后所看到的,我在脚本参数$1下分配文件时也有问题。我应该将文件作为变量(如data)或显式地指向gensub中的文件
提前感谢您的帮助:不确定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
它将规范化空白作为副作用