type
status
date
slug
summary
tags
category
icon
password

前言

本文档总结了shp格式断层数据转为gmt可读取的文本文件后,如何将其整理为段头包含断层名的数据。
最终数据将可用于gmt绘制带名称的断层
由于断层数据涉密情况未知,以下所展示出来的数据均为本人经过随机修改的数据,并非实际断层数据
原始数据格式:
该数据的段头第一行注释中包含断层名,但以|作为分隔符,好在断层名称的位置固定,为|分隔的第26个字符串。
因此我们考虑以|作为分隔符,将数据分隔成若干域,从中提取出断层名所在的域,然后将其与原始数据进行合并。
注意:由于合并后断层名应该位于多段数据段头符号之后,因此合并前需要将提取出的断层名向上移动一行。

断层名提取

我们发现断层名所在行均是已#开头的注释行,
使用gawk对文本进行劈分,需要先指定分隔符再提取数据,可通过-F来指定分隔符号。通过从第二列开提取来实现上移一行,命令如下:
得到b文件的格式为:
其中的空白行为断层的经纬度数据所在行,由于其中没有|字符,因此在处理中未能提取到任何字符。也正是由于gawk提取文本时存在该特点,才考虑使用gawk进行处理,而不是使用同样具有数据劈分和提取功能的cut。
cut的功能相对简单,一开始本人还在考虑是否设法通过gawk和cut的嵌套来实现按需提取,但无意中在网上看到awk指定分隔符进行数据分隔的方法,感觉该方法既简单又高效,因此选用gawk来实现。
但是由于gmt绘图需要再读取数据的段头 -L标签后读取断层名称,因此需要在b.txt数据的基础上给断层名前加上-L

合并数据

有数断层数据已经经过向上移动一行的处理,因此只需要将两个文件作为两列数据进行横向合并即可,该需求可以通过Unix工具paste来实现。
paste功能:
paste指令会把每个文件以列对列的方式,一列列地加以合并。
paste语法:
参数:
  • d<间隔字符>或--delimiters=<间隔字符> 用指定的间隔字符取代跳格字符。
  • s或--serial 串列进行而非平行处理。
  • -help 在线帮助。
  • -version 显示帮助信息。
示例:
从本文通过以下命令来进行数据合并:
将faultAll.gmt数据与c.txt数据合并成两列,并以空格作为分隔符。由于c.txt数据中仅有对应faultAll.gmt段头数据的行存在实际数据,而对应faultAll.gmt中断层经纬度数据的行则为空,因此合并时只会在faultAll.gmt的段头符号后追加c.txt数据中的断层名,而实际的经纬度数据后仅追加了空字符,故对数据不产生影响。
输出结果如下:
至此,数据已合并成功。

再写点啥

数据整理

以上生成的数据,段头符号>的下一行是原始数据中断层信息的注释行,其中包含了断层的活动时期、初露状态、名称、长度等信息,如果不需要这些信息,可以再次使用gawk仅提出非注释行:
这样数据看起来会比较整齐、美观

绘图

代码:
结果
notion image
 
project模块GMT计算时间差
  • Twikoo
  • Giscus
  • Cusdis