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

时间:2015-02-25 15:36:31

标签: awk extract

我有一个包含3D网格(x,y,时间)的文件,每个网格点都有一个属性“v”。我想在特定的x,y点,或者更具体地,在最接近我想要的位置的x,y点处提取“v”的时间曲线(期望的位置不太可能精确地落在网格点上) 。当文件是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 个答案:

答案 0 :(得分:1)

$ 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[]的算法是否符合您的要求,然后根据其他情况进行调整。