我需要帮助! 我有几点 ABCDEF... 位置如下:
A 0.00 0.50 0.10
B 1.00 2.50 2.00
C 0.70 0.88 1.29
D 2.13 2.90 0.11
E 1.99 0.77 0.69
...
我的目标是计算 AB、BC、CD、EF... 的距离以及它们的总和,输出形式如下:
sum_distance(AB)
sum_distance(AB+BC)
sum_distance(AB+BC+CD)
sum_distance(AB+BC+CD+DE)
sum_distance(AB+BC+CD+DE+EF)
....
我在互联网上发现 awk 可以做到并适用于我的情况。但是,屏幕上没有输出任何结果或错误。你能帮我解决这个问题吗?
bash 外壳,awk
awk 'FNR==NR { a[NR]=$0; next } { for (i=FNR+1;i<=NR-1;i++) {split(a[i],b); print $1 "-" b[1], sqrt(($2-b[2])^2 + ($3-b[3])^2 + ($4-b[4])^2) | "column -t" } NR--}'
输出:
2.934280150
4.728297987
7.470140434
9.682130488
11.92469598
......
最佳答案
对于这项琐碎的任务,您不需要如此复杂的脚本。试试这个:
awk 'NR>1{ printf "%.9f\n",s+=sqrt(($2-x)^2+($3-y)^2+($4-z)^2) }
{ x=$2;y=$3;z=$4 }' file
对于除A
之外的所有点,计算距离,将其添加到总和s
并打印总和。对于所有点,将坐标保存在 x, y, z
中以供下一次计算。它的输出与 gawk 类似:
2.934280150
4.728297987
7.470140434
9.682130488
关于awk - 计算连续点的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55412201/