我有一个文本文件包含这样的数据列:
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
是数学中的余弦函数。
我该怎么做?
提前致谢。
答案 0 :(得分:2)
试试这个awk
命令,
awk '{var=$3*-sin($6); foo=$3*-cos($6); print $1,$2,$3,var,foo;}' file
答案 1 :(得分:1)
我使用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
答案 2 :(得分:1)
有了这种需要,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)
在你的情况下,我建议使用java方法创建一个bashj文件,将数据加载到文件中的double [] [],并返回一个java函数,返回加载的Math.sin()和Math.cos()数据,使用行col索引作为参数...