代码之家  ›  专栏  ›  技术社区  ›  aj2015

如何从包含数据点网格的文件中提取特定位置的数据

  •  0
  • aj2015  · 技术社区  · 11 年前

    我有一个包含三维网格(x,y,time)的文件,每个网格点都有一个属性“v”。我想提取特定x,y点的“v”的时间分布,或者更具体地说,在最接近我所需位置的x,y位置(所需位置不太可能正好落在网格点上)。当文件是ascii或二进制格式时,是否有一个简单的awk脚本?

    文件格式示例

    X   Y   Time   V
    1   1     0    2
    1   1    10    3
    1   1    20    4
    1   2     0    3
    1   2    10    8
    1   2    20   11
    1   3     0    3
    

    如果感兴趣的位置是 x=0.9, y=2.1

    1   2     0    3
    1   2    10    8
    1   2    20   11
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   Ed Morton    11 年前
    $ cat tst.awk                           
    function abs(val) { return (val < 0 ? -val : val) }
    
    BEGIN { ARGV[ARGC] = ARGV[ARGC-1]; ARGC++ }
    
    NR==FNR {
        if (NR>1) {
            dist[NR] = abs(x - $1) + abs(y - $2)
            min = (NR==2 || dist[NR]<min ? dist[NR] : min)
        }
        next
    }
    
    FNR==1 || dist[FNR] == min
    
    $ awk -v x=0.9 -v y=2.1 -f tst.awk file
    X   Y   Time   V
    1   2     0    3
    1   2    10    8
    1   2    20   11
    

    只需检查要计算的算法 dist[] 是你需要的,并调整它以适应其他情况。