我有一个包含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
答案 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[]
的算法是否符合您的要求,然后根据其他情况进行调整。