0
我有三个文件!AWK读取文件并在不同列之间进行操作
coord.xvg
veloc.xvg
force.xvg
每个文件
有多个号码线可以说10000 我想建立一个脚本,
打开三个文件 读取列 ,使他们之间的算术运算的每一行。
例如
if every file has 4 words
coord.xvg >> Time x y z
veloc.xvg >> Time vx vy vz
force.xvg >> Time fx fy fz
和C,V,F代表coord.xvg,veloc.xvg,force.xvg
if I write the operation 2*v*v+c*f*c the output should be
column1 Column2 Column3 Column4
Time 2*vx*vx+cx*fx*cx 2*vy*vy+cy*fy*cy 2*vz*vz+cz*fz*cz
我已经在互联网上找到以下
awk '{
{ getline < "coord.xvg" ; if (FNR==90307) for(i=1;i<=2;i+=1) c=$i}
{ getline < "veloc.xvg" ; if (FNR==90307) for(i=1;i<=2;i+=1) v=$i}
{ getline < "force.xvg" ; if (FNR==90307) for(i=1;i<=2;i+=1) f=$i}
}
END {print c+v+f}' coord.xvg
它代表我想要在90307行之后开始读取的文件。
,但它并没有帮助我很多,因为它仅返回的每一个变量
任何思想的最后的值?
谢谢你的回复!这是非常接近的,但我认为我没有解释到底我想要什么。 我的文件coord.xvg veloc.xvg force.xvg包含90307列和差不多60gb !!!!!!所以我需要在上面的脚本中使用“for”语句。这就是为什么我以我为例。 –
我做了以下,但我仍然错过了一些东西,因为对于fz * z的多样性,这个脚本将fz的当前值和coord.xvg的最后一个值相乘!!!!! (i = 2; i <= 10; i + = 3)print“x =”,x = $ i,“if(FNR == 90307) y =“,y = $(i + 1),”z =“,z = $(i + 2),”z * x =“,z * x getline <”veloc.xvg“; if(FNR =打印“vx =”,vx = $ i,“vy =”,vy = $(i + 1),“vz =”,vz = 90307) $(i + 2) getline <“force.xvg”; if(FNR == 90307)for(i = 2; i <= 10; i + = 3)print“fx =”,fx = $ i,“fy =“,fy = $(i + 1),”fz =“,fz = $(i + 2),”fz * z =“,fz * z } END {print”z =“,z}' coord.xvg –