type
status
date
slug
summary
tags
category
icon
password
众所周知,数据处理中,时间差的计算相对普通数据的差值计算要复杂很多。在地震数据处理和绘图时,经常需要计算时间差,windows的命令行中持支持简单的四则运算和逻辑运;linux或mac的shell中虽然提供了date命令,可以对时间数据进行操作,但计算时间差需要将绝对时间转为相对时间后进行差值计算,并且GUN和BSD中的date命令存在差异,致使linux和mac下date命令的使用常常混淆。那么有没有以直接计算时间差的简便方法,答案当然是有。
GMT中的math模块提供了大量简单或复杂的计算功能,其中`DIFF`运算符可以用来计算序列相邻数据的差值,SUB运算符也可以对两组数据做减法,并且对于时间序列同样可操作。因此,我们只需要对数据的输入和输出格式做限定,即可通过这些功能方便的实现时间差的计算。

计算时间序列的相邻时间差

可以使用DIF运算符实现。
time文件中保存了一组发震时刻数据
通过以下方法可计算相邻地震之间的时间间隔
  • DIFF计算时间序列的相邻时间差;
  • -C0表示对读取的time数据表的第0列进行操作;
  • -N1/0指定时间数据的id,/前的1表示数据的列数,/后的0表示时间在第0列;
  • -f指定时间为绝对时间或相对时间,i/o分别用来指示设置的是输入数据还是输出数据,T表示绝对时间,t表示相对时间;
  • time为数据文件
  • DIV表示除法,其之前的两个数依次为被除数和除数。
运行结果

计算多个时间序列的时间差

通过SUB功能实现

计算输入数据与指定时间之间的差

此处-fi/o后的0:1表示指定的绝对时间和相对时间作用于标准输入的第0列之第1列
运行结果

计算连个时间序列的对应时间差

SUB同样可以对两个时间序列文件计算时间差
运行结果
输入的时间序列文件分别为
以上方法均需要-fiT指定输入数据为绝对时间,并设置-fot设置输出数据为相对时间(默认单位s)。
其实,gmt math在对时间数据进行计算时,都是先将绝对时间转为相对1970-01-01的相对时间(输入数据本身为相对时间的除外),然后进行计算。通过-fot设置输出数据为相对时间时,才能显示为浮点数据,否则仍为相对1970-01-01的绝对时间表示格式。
💡
注意
-C选项用来设置要对读取的数组中的哪个序列进行操作,其在语句中的位置非常重要,不同位置可能导致不同的计算结果,具体参考GMT中文手册/gmtmath模块
 
制作段头包含名称的断层文件GMT绘制T形坐标轴
  • Twikoo
  • Giscus
  • Cusdis