我希望匹配输入中的所有浮点数,并用不同格式的浮点数替换它们。
这是我尝试过的东西:
echo "123.45E+00 blah 678.90E+00 blah 3.1415926535897932E+0000" \
| awk '{gsub(/[0-9]+\.[0-9]+\E\+[0-9]+/,sprintf("%E","&")); print $0}'
不幸的是,sprintf中的"&"
是一个字符串而不是一个数字,结果是:
0.000000E+00 blah 0.000000E+00 blah 0.000000E+00
这是我想要的数字格式,但使用"&"
导致零作为参数的值,而不是匹配的数字。
将"%E"
格式更改为"%s"
的工作原理是返回原始字符串。
我想要上述输入的输出是:
1.234500E+02 blah 6.789000E+02 blah 3.141593E+00
答案 0 :(得分:2)
尝试这样的事情:
echo "123.45E+00 blah 678.90E+00 blah 3.1415926535897932E+0000" |
awk '{
for (i=1; i<=NF; i++)
sub(/[0-9]+\.[0-9]+\E\+[0-9]+/, sprintf("%.6E", $i), $i)
}1'