AWK读取文件并在不同列之间进行操作
我有三个文件AWK读取文件并在不同列之间进行操作,awk,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代表坐标,速度,力 if
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代表坐标,速度,力
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
awk'{
{getline<“coord.xvg”;if(FNR==90307)for(i=1;i如果我正确理解了您的意思,就可以让您开始
$ cat *.xvg
Time 1 2 3
Time 4 5 6
Time 7 8 9
Time 10 11 12
Time 13 14 15
Time 16 17 18
Time 19 20 21
Time 22 23 24
Time 25 26 27
下面的awk脚本
{ if (FNR>=1) {
{ getline < "coord.xvg" ; c1=$2;c2=$3;c3=$4}
{ getline < "veloc.xvg" ; v1=$2;v2=$3;v3=$4}
{ getline < "force.xvg" ; f1=$2;f2=$3;f3=$4}
print c1,c2,c3,v1,v2,v3,f1,f2,f3
print $1, c1+v1+f1, c2+v2+f2, c3+v3+f3
}}
如果(FNR>=1)
部件控制显示哪些行。计数从1开始,更改此值以符合您的需要。我留给您的实际计算:-)谢谢您的回复!!这很接近,但我想我没有确切解释我想要什么。我的文件coord.xvg veloc.xvg force.xvg包含90307列,几乎60gb!!!!!所以我需要一个“for”上面脚本中的语句。这就是我在示例中使用它的原因。我做了以下操作,但仍然缺少一些内容,因为对于fzz的多重性,此脚本将fz的当前值与coord.xvg的最后一个值相乘!!!!!awk'{getline<“coord.xvg”;if(FNR==90307)for(I=2;I
$ awk -f s.awk coord.xvg
1 2 3 19 20 21 10 11 12
Time 30 33 36
4 5 6 22 23 24 13 14 15
Time 39 42 45
7 8 9 25 26 27 16 17 18
Time 48 51 54