在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

前三列是一个点的坐标(let’say a(,而后三列是第二个点的座标(let‘say 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

相关内容

最新更新