1

我想匹配输入中的所有浮点数,并用不同格式的浮点数替换它们。

这是我尝试过的东西:

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
4

1 回答 1

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'
于 2013-07-29T17:58:47.400 回答