我想写一个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')
再次感谢大家。
答案 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
无法执行浮点数学运算,因此,如果您的数据是浮点运算,则可能需要使用awk
或Python
。