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