以下两条awk行的差异让我感到困惑:
$ cat a.txt
1
$ awk '{$2=$1/1982300000 ;$3 = $2 * 0.05}{print $1"\t"$2"\t"$3}' a.txt
1 5.04465e-10 2.52232e-11
$ awk '{$2=$1/1.98*10^09 ;$3 = $2 * 0.05}{print $1"\t"$2"\t"$3}' a.txt
1 5.05051e+08 2.52525e+07
我认为我正在用awk写指数表示法,请问您是否可以错误
答案 0 :(得分:1)
这里
$ echo 1 | awk -v OFS='\t' '{print $1, a=$1/(1.98*10^9), a*0.05}'
1 5.05051e-10 2.52525e-11
您需要添加括号,否则第二个乘法(10 ^ 9)不在分母中。
或者,您可以使用e
表示法
$ echo 1 | awk -v OFS='\t' '{print $1, a=$1/1.98e9, a*0.05}'
不需要额外的餐券。
答案 1 :(得分:1)
您需要考虑以下几点:
以科学记数法表示的数字 1.23×10 -4 最好归结为编程时使用E记数法。电子注释最常见的形式是1.23E4
或1.23e4
。
在编写1.23*10^4
时(假设^
表示 Exponentiation ),您将主动执行幂运算以计算10^4
是多少,然后是两个数字的乘积。定义单个数字看起来非常昂贵。
乘法与除法不相关。这意味着a/b*c
与a/(b*c)
不同。
因此,解决您的问题的方法是:
使用电子记号:
awk '{$2=$1/1.98e9 ;$3 = $2 * 0.05}{print $1"\t"$2"\t"$3}' a.txt
或添加括号:
awk '{$2=$1/(1.98*10^9) ;$3 = $2 * 0.05}{print $1"\t"$2"\t"$3}' a.txt