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. python入门基础—安装

    说明:0基础,那就先练习python语言基础知识,等基础知识牢固了,再对各开发平台分别进行介绍.这里只介绍两个简单而又容易搭建开发平台Anaconda和pycharm Anaconda是一个开源的Py ...

  2. Divide by Zero 2021 and Codeforces Round #714 (Div. 2) B. AND Sequences思维,位运算 难度1400

    题目链接: Problem - B - Codeforces 题目 Example input 4 3 1 1 1 5 1 2 3 4 5 5 0 2 0 3 0 4 1 3 5 1 output 6 ...

  3. 【大话云原生】煮饺子与docker、kubernetes之间的关系

    云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈.看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡. 所以笔者就有了写<大话云原生>系列文章的想法,期望用最通俗.简单的语言说明 ...

  4. Infrastructure 知识: DNS 命令: dig, host

    dig 基本用法: dig @server name type 或者用-t type来指定(更常见) dig @server -t type name 例子详解 # 最简单的使用 $ dig www. ...

  5. 算法篇(1) KMP JS实现最优查找子串

    var strStr = function (haystack, needle) { let i=0, j = 0; let length = haystack.length; let next = ...

  6. Java 8的18个常用日期处理

    Java 8的18个常用日期处理 一.简介 伴随 lambda表达式.streams 以及一系列小优化,Java 8 推出了全新的日期时间API. Java处理日期.日历和时间的不足之处:将 java ...

  7. 雪花算法生成分布式ID

    分布式主键ID生成方案 分布式主键ID的生成方案有以下几种: 数据库自增主键 缺点: 导入旧数据时,可能会ID重复,导致导入失败 分布式架构,多个Mysql实例可能会导致ID重复 UUID 缺点: 占 ...

  8. Springboot中整合knife4j接口文档

    在项目开发过程中,web项目的前后端分离开发,APP开发,需要由前端后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发. 什么是knife4j 简单说knife4j就swagge ...

  9. XCTF练习题---MISC---stage1

    XCTF练习题---MISC---stage1 flag:AlphaLab 解题步骤: 1.观察题目,下载附件 2.打开附件后发现是一张图片,初步判断是图片隐写,上Stegsolve进行转换,得到一张 ...

  10. C# 一维数组如何快速实现数组元素的数据类型的转换?

    一.场景假设 假设有一串字符串如下所示,字符串中的数字之间已用英文状态下的逗号隔开.要求用此字符串中的数字快速生成int类型的数组,且尽可能使用最少的代码量. string str = "1 ...