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

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

  1. C++类实现三维数组算法

    在学习北京大学教授的<程序设计实习 / Practice on Programming>中,遇到了一个习题,花了很长时间研究,现在分享出来: 课题地址:https://class.cour ...

  2. Jni :三维数组处理方法 ,以整形三维数组为例 C++实现

    本文原创,转载请注明地址:http://www.cnblogs.com/baokang/p/4982846.html 关于Jni的基本使用方法,请参阅:Java 调用 C++ (Java 调用 dll ...

  3. C语言三维数组分解

    很多人在学习C的时候,感觉三维数组很难想象,而且不理解深度是什么?做了一个图,帮大家分解一下                                                       ...

  4. Java 一维数组 二维数组 三维数组

    二维数组包含一位数组  三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推.   下面是 一维 二维 三维数组例子   一维数组: int[] array1 ...

  5. 三维数组——与 宝玉QQ群讨论交流之二

    宝玉 12:27:35 这几天看了大部分大家交的作业,发现一个主要问题还是卡在对三维数组的理解上,之前把三维数组类比成三维空间可能会造成误导 宝玉 12:27:45 其实鞠老师解释的很好: 三维数组 ...

  6. c# 基础之数组(包含三维数组)

    public enum ChessType { White = , None=, Black=, } class Program { static void Main(string[] args) { ...

  7. php三维数组变二维数组

    <?php $result = Array(0 => Array(0 => Array(bid => 41,brealname => 'we教官',cid => 4 ...

  8. java读取目录下所有csv文件数据,存入三维数组并返回

    package dwzx.com.get; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; ...

  9. php三维数组去重(示例代码)

    php三维数组去重的示例代码.  假设叫数组 $my_array; <?php // 新建一个空的数组. $tmp_array = array(); $new_array = array(); ...

随机推荐

  1. C++---使用类

    运算符重载 概念 运算符重载就是想法转换, 目的是简化函数调用的方式 重载就是赋予新的含义, 运算符重载也是, 即同一个运算符可以有不同的功能 C++本身已经对一些运算符进行了重载, 同时C++允许程 ...

  2. python---输出函数运行时间的装饰器

    """ 装饰器: 不改变原函数的调用方式和函数的前提下, 增加额外的功能, 其本质就是一个闭包 ---输出函数的运行时间 """ impor ...

  3. ORM中choices参数(重要)、MTV于MVC模型、多对多关系三种创建方式

    choices参数(重要) **使用方式

  4. vue 跨域配置代理 get/post 请求

    1.第一步要有 axios 插件 : npm i axios 首先要在自己的项目手动添加一个文件 vue.config.js 个人理解的为 这是axios 封装的跨域文件. 2.vue.config. ...

  5. UnrealEngine创建自定义资产类型

    导语 这篇文章记录了将UObject实例保存在Asset文件的方法,用这个方法可以将自定义的UObject数据序列化保存到文件,可以用于自定义UE资源类型. 创建UObject类 这一步比较简单,按照 ...

  6. Node.js躬行记(18)——半吊子的可视化搭建系统

    我们组维护的管理后台会接到很多开发需求,每次新开页面,就会到处复制黏贴相关代码. 并且还会经常性的翻阅文档,先在书签或地址栏输入WIKI地址,然后找到那一份说明文档,再定位到要看的组件位置. 虽然单人 ...

  7. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  8. Glance基础服务运维

    @ 目录 Glance镜像服务介绍 创建镜像 查看镜像 修改镜像 删除镜像 Glance镜像服务介绍 Glance是OpenStack镜像服务,用来注册.登陆和检索虚拟机镜像.Glance服务提供了一 ...

  9. mybaits映射器方法多参数传递

    1.参数传递的表达式 1.#{参数名}: 这种方法可以解决sql注入,把参数变成 ?(推荐用这种方式) 2.${参数名}:这种方法不能防止sql注入 2.只有一个参数 方法:public Countr ...

  10. 配置Linux的时钟同步

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ Ubuntu系统默认的时钟同步服务器是ntp.ubuntu.com,Debian则是0.debian.pool.ntp.or ...