如何编写bash脚本以计算积分?

时间:2019-04-24 14:53:26

标签: bash sum integral

我想写一个bash脚本。该脚本必须读取包含两列的文件。它必须读取第一列的第一行(假设x1)。然后,它必须读取第二列的第二行(假设为v2)和第一行(假设为v1)。然后,它必须计算值x1-y1,其中y1 = v2-v1。第一列的每一行直到文件的末尾都将所有这些都返回,并将所有值返回到输出。

就我个人和基本经验而言,真正的困难是按照我描述的那样来调用变量。如标题中所述,操作是求积分。

如果您有任何建议(例如,使用python编写相同的脚本),因为比较容易,这对我来说很好。

我真的非常感谢大家。

更新 我尝试使用Python。我在获取迭代脚本时遇到一些困难。这就是我所拥有的:

import sys
import numpy as np

for i in range(0, 99):
xvals=np.loadtxt("pos{}.txt".format(i), float)
yvals=np.loadtxt("forc{}.txt".format(i), float)

if (len(xvals) != len(yvals)):
print ("Error bla bla")
sys.exit()

integr = 0

for i in range (1, len(xvals), 1):
integr = integr + yvals[i]*(xvals[i] - xvals[i-1])

integr=np.savetxt("work{}.txt".format(i), integr.reshape(1,), fmt='%1.5f')

再次感谢大家。

1 个答案:

答案 0 :(得分:1)

我认为您需要查看bash数组,因此这里是一个入门的示例:

#!/bin/bash

# Declare two arrays
declare -a x
declare -a y

# Read two values from each line of input file and append to arrays "x" and "y"
while read c1 c2 ; do
   x+=($c1)
   y+=($c2)
   echo "read c1=$c1 and c2=$c2"
   # Demonstrate some maths - a simple difference
   ((diff=c2-c1))
   echo "difference: $diff"
done < file.txt

# Print a couple of elements to see how to access them
echo "x[0]=${x[0]}"
echo "y[2]=${y[2]}"

如果我将其用作file.txt

10 20
11 21
12 22

我明白了:

read c1=10 and c2=20
difference: 10
read c1=11 and c2=21
difference: 10
read c1=12 and c2=22
difference: 10
x[0]=10
y[2]=22

希望这足以让您入门。正如我在评论中提到的那样,bash无法执行浮点数学运算,因此,如果您的数据是浮点运算,则可能需要使用awkPython