ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-18 21:34:26  阅读:134  来源: 互联网

标签:index 179.5 经纬度 89.5 插值 crust1 --- awk


awk三维数组与插值

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

下载Crust1.0模型

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

数据格式

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

行号 latitude lat_index longitude lon_index
1 89.5 180 -179.5 0
2 89.5 180 -178.5 1
--- --- --- --- ---
360 89.5 180 179.5 359
361 88.5 179 -179.5 0
362 89.5 179 -178.5 1
--- --- --- --- ---
64800 -89.5 0 179.5 359

awk三维数组存储

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

lat=-89.5
lon=-179.5
cat /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 

标签:index,179.5,经纬度,89.5,插值,crust1,---,awk
来源: https://www.cnblogs.com/liangxuran/p/16389343.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有