如何从包含数据点网格的文件中提取特定位置的数据
How to extract data at a specific location from a file containing a grid of data points
我有一个包含 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
$ 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 - ) + abs(y - )
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[]
的算法是否符合您的需要,然后调整它以适应其他情况。
我有一个包含 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
$ 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 - ) + abs(y - )
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[]
的算法是否符合您的需要,然后调整它以适应其他情况。