awk运用三维数组进行插值获得任意经纬度处的水层沉积层地壳厚度

博客 动态
0 118
羽尘
羽尘 2022-06-18 22:00:41
悬赏:0 积分 收藏

awk运用三维数组进行插值获得任意经纬度处的水层沉积层地壳厚度

awk运用三维数组进行插值,一行代码可获得任意经纬度处的冰层水层沉积层和地壳厚度。

awk三维数组与插值

目的:给定经纬度,获得该点地下的冰层水层沉积层和地壳的厚度
实现:awk一行命令

下载Crust1.0模型

该数据集的详细介绍见官网.
解压后有几个文件:crust1.vp,crust1.vs,crust1.rho,crust1.bnds,分别代表P波速度,S波速度,密度和深度.

数据格式

每个文件共有64800行,9列,每行经纬度如下表所列。crust1.bnds的每行代表某个经纬度所对应的水层,冰层,上中下沉积层和上中下地壳的深度。

行号latitudelat_indexlongitudelon_index
189.5180-179.50
289.5180-178.51
---------------
36089.5180179.5359
36188.5179-179.50
36289.5179-178.51
---------------
64800-89.50179.5359

awk三维数组存储

在BEGIN{}里将三维数组初始化,在{}里将数据存储到三维数组中,在END{}里线性插值

lat=-89.5lon=-179.5cat /opt/crust10/crust1.bnds | awk 'BEGIN{  for (lat_index=0; lat_index<180; lat_index++) {    for (lon_index=0; lon_index<360; lon_index++) {      for (i=1; i<=9; i++) {        value[lat_index,lon_index,i]=0.0      }    }  } }{  lat_index=180-int(NR/360);   lon_index=NR%360;   for (i=1; i<=9; i++) {    value[lat_index,lon_index,i]=$i  }}END{  lat_index1=int('"$lat"'+89.5)  lat_index2=lat_index+1  lon_index1=int('"$lon"'+179.5)  lon_index2=lon_index+1  for (i=1; i<9; i++) {    lat1='"$lat"'+89.5-lat_index1    lat2=1.0-lat1    lon1='"$lon"'+179.5-lon_index1    lon2=1.0-lon1    print i,value[lat_index1,lon_index1,i]*lon2*lat2+value[lat_index1,lon_index2,i]*lon1*lat2+value[lat_index2,lon_index1,i]*lon2*lat1+value[lat_index2,lon_index2,i]*lon1*lat1  }}' | cat 
posted @ 2022-06-18 21:18 Philbert 阅读(4) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员