使用awk的欧几里得距离的计算未给出预期的输出

问题描述

作为距离计算的输入,我有一个包含坐标的文件(inp.txt):

9.911 -2.781 30.097 7.768 -4.335 29.094
11.811 -1.900 30.082 13.294 -1.993 27.440
6.947 -0.742 31.786 6.390 -2.976 30.089
8.960 -2.090 32.359 11.764 1.604 25.408
9.156 -3.314 29.815 11.764 1.604 25.408

前三列是一个点的坐标(假设A),后三列是第二个点的坐标(假设B)。我要计算以下行中以相同方式排列的A和B与所有其他点之间的距离。然后,在这种情况下,我希望输出5个距离值。

我用于此目的的awk代码:

awk '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inp.txt >> out.txt

输入它我得到错误:

 awk: fatal: cannot open file `{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' for reading (No such file or directory)

我试图弄清楚为什么我没有获得此错误。 感谢您的帮助。

解决方法

输入文件是否位于您认为的位置?您的脚本可以通过当前目录中的inp.txt为我工作。如果我故意引用了错误的文件名,则会出现与您类似的错误:

t2$ awk '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} {print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inpBAD.txt
awk: fatal: cannot open file `inpBAD.txt' for reading (No such file or directory)

此外,如果您希望每一行都有一个值,而不仅仅是最后一行,那么您可能就不需要END条件了。

t2$ awk '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inp.txt
7.1

t2$ awk '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} {print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inp.txt
2.83079
3.03119
2.86021
8.3561
7.1
,

您执行的是awk -f '{x1=$1;...}'awk 'foo' '{x1=$1;...}'而不是awk '{x1=$1;...}',因此awk试图打开脚本,就像它是文件名一样。鉴于特定的错误消息,后者的可能性更大。看:

$ awk -f '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inp.txt >> out.txt
awk: fatal: cannot open source file `{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' for reading: No such file or directory

$ awk '7' '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inp.txt >> out.txt
awk: fatal: cannot open file `{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' for reading: No such file or directory

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...