在bash中使用sin和cos数学函数

  • 本文关键字:cos 函数 sin bash bash math
  • 更新时间 :
  • 英文 :


我有一个文本文件,包含像这样的数据列:

 col1     col2    col3    col4   col5  col6    col7   col8    col9  col10
50.000   7.920    0.509   11.2   2.60  192.7  25.71  0.3490  188.6  17.81
50.170   7.920    0.609   12.2   2.72  211.7  26.17  0.3326  213.8  18.19
50.330   7.920    0.712   14.1   2.92  218.9  28.17  0.3228  215.1  21.73
...

我想创建另一个分隔文本文件(使用bash脚本),它派生于第一个文本文件,其列的值如下:

col1      col2      col3      col3*[-sin(col6)]     col3*[-cos(col6)]
...
数学上

sin为正弦函数,cos为余弦函数。我该怎么做呢?

试试这个awk命令,

awk '{var=$3*-sin($6); foo=$3*-cos($6); print $1,$2,$3,var,foo;}' file

我使用bc的较长版本:

awk '{printf "%f * -s (%f);n", $3, $6}' < input.txt  | bc -l > col4.txt
awk '{printf "%f * -c (%f);n", $3, $6}' < input.txt  | bc -l > col5.txt
awk '{print $1, $2, $3}' < input.txt | paste -d " " - col4.txt col5.txt

对于这种需求,bash是不够的。尝试bashj(具有java支持的bash变体)https://sourceforge.net/projects/bashj/。它旨在满足您的需求(以及更多)。三角函数:

#!/usr/bin/bashj
X=0.5
COSX=Math.cos($X)

您还可以将自己的方法放在bashj加载的jar中,或者在bashj脚本本身中包含一些java源代码:

#!/usr/bin/bashj
#!java
public static int factorial(int n) 
{if (n<=0) return(0);
 if (n==1) return(1);
 return(n*factorial(n-1));}
#!bashj
echo j.factorial(10)

在您的情况下,我建议创建一个bashj文件,其中使用java方法将数据加载到文件中的double[][]中,并使用java函数返回所加载数据的Math.sin()和Math.cos(),使用row col index作为参数…

最新更新