awk中的科学和通用符号

awk中的科学和通用符号,awk,Awk,我对以下两条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写的指数符号有点错误

我对以下两条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写的指数符号有点错误,你能在这里纠正一下吗

$ 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}'
这不需要额外的帕兰语。

这里

$ 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.23×10-4形式的科学记数法写成的数字,在归结到编程时,最好用电子记数法写成。最常见的电子符号形式是
    1.23E4
    1.23E4

    当您编写
    1.23*10^4
    (假设
    ^
    表示求幂)时,您将主动执行求幂运算以计算
    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
      

      • 这里有几件事你必须考虑:

      • 用1.23×10-4形式的科学记数法写成的数字,在归结到编程时,最好用电子记数法写成。最常见的电子符号形式是
        1.23E4
        1.23E4

        当您编写
        1.23*10^4
        (假设
        ^
        表示求幂)时,您将主动执行求幂运算以计算
        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
          

        尝试在1982300000后面加一个小数。如果我把括号放在1.98*10^09左右,我会得到相同的结果,即$1/(1.98*10^09),试着在1982300000后面放一个小数点。如果我把括号放在1.98*10^09左右,我会得到相同的结果,即$1/(1.98*10^09)谢谢你事实上我加了括号我很高兴知道e和e在awk中工作谢谢你事实上我加了括号我很高兴知道e和e在awk中工作谢谢你事实上我加了括号我很高兴知道e和e在awk中工作谢谢你事实上我加了括号我很高兴知道e和e在awk中工作