awk - 使用 awk 按欧氏距离选择数据

标签 awk euclidean-distance

我有一个很大的 ASCII 数据文件,想通过欧氏距离 MINDISTANCE=5.2 到某个点 (x0, y0, z0)=(1,2,3) 选择数据。 换句话说 if(sqrt((x0-v2)^2+(y0-v3)^2+(z0-v4)^2))>MINDISTANCE) 然后打印行($0),否则转到下一行并测试条件……

输入

#v1  v2  v3   v4
0    1    2    3        
1    4    5    6       
2    10   10   17       
3    2    3    4
4    20   20   15        
5    20   88   16     
6    20   99   17
7    20   20   22
8    1    2    3
9    10   10   20

输出

2    10   10   17       
4    20   20   15        
5    20   88   16     
6    20   99   17
7    20   20   22
9    10   10   20

我已经看到,sqrt 的计算是可能的 Attempted to use awk sqrt but only returns 0

否则上述条件可以改为 if(((x0-v2)^2+(y0-v3)^2+(z0-v4)^2))>MINDISTANCE^2) 然后打印行($0),否则转到下一行并测试条件。 ..

最佳答案

这是从您自己的伪代码派生的,并产生您预期的输出。如果我是你,我会尝试自己编写代码并将其用作引用。

BEGIN {
  min_distance = 5.2;
  x0 = 1;
  y0 = 2;
  z0 = 3;
}

{
  v2 = $2;
  v3 = $3;
  v4 = $4;

  if(sqrt((x0-v2)^2 + (y0-v3)^2 + (z0-v4)^2) > min_distance) {
    print $0;
  }
}

坦率地说,如果在尝试自己编码之后,您仍然不能想出合适的 awk 代码,我会花几个小时学习 awk .它非常简单明了,可能值得您花时间。

从命令行运行它...

awk -f /tmp/code.awk /tmp/input.txt

关于awk - 使用 awk 按欧氏距离选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39395143/

相关文章:

linux - Sed 没有写入文件

r - 基于 r 中给定距离的 5 个最近邻

python - 创建一个距离中心有欧氏距离的二维 Numpy 数组

python - 在python中计算PCA的欧氏距离

linux - 在字符串中找到模式后评论 bash 行

awk - 使用 AWK 或 SED 获取每一行的第一个词?

r - 计算矩阵 A 和 B 中所有行之间的欧氏距离

c++ - 计算两个描述符之间的距离

awk - 打印 $0 时如何删除 awk 中的字段分隔符?

bash - 如何使用 awk 命令将查找输出写入同一文件