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,...)?
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,...)?
使用 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
您只想使用printf
指定输出格式:
$ echo "0.123e2" | awk '{printf "%.1f\n",$0}'
12.3