0
echo "0.123e2" | gawk '{print gensub(/([0-9]+\.[0-9]+)e([0-9]+)/, "\\1 * 10 ^ \\2", "g")}'

结果如预期的那样给了我“0.123 * 10 ^ 2”。有没有办法真正告诉它计算“12.3”这个词?

一般来说:有没有办法修改/转换匹配项(\\1,\\2,...)?

4

2 回答 2

1

使用 perl 可能会更容易:

perl -pe 's/(\d+\.\d+e\d+)/ sprintf("%.1f",$1) /ge' filename

使用您的测试数据:

echo '0.123e2 xyz/$&" 0.3322e12)282 abc' | perl -pe 's/(\d+\.\d+e\d+)/ sprintf("%.1f",$1) /ge'
12.3 xyz/$&" 332200000000.0)282 abc

使用 awk:

awk '{ 
      while ( match( $0, /[0-9]+\.[0-9]+e[0-9]+/ ) > 0 ) {
       num = sprintf("%.1f", substr( $0, RSTART, RLENGTH ) )
       sub( /[0-9]+\.[0-9]+e[0-9]+/, num )
      }
       print $0
    }' filename
于 2013-05-14T18:57:26.320 回答
1

您只想使用printf指定输出格式:

$ echo "0.123e2" | awk '{printf "%.1f\n",$0}' 
12.3
于 2013-05-13T18:41:38.550 回答