✍️ 周茂 , 田冬冬 , 陈箫翰 • 📅 2026-01-12

# split

官方文档:

  split

简介:

  将表数据拆分成单独的段

split 从标准输入 [或 xy[z][dh]file] 读取一系列 (x, y [, z]) 记录 [或者可选的 (x, y [, z], d, h)；参见 `-S` 选项]， 并将其拆分为独立的 (x, y [, z]) 系列列表，使得每个系列在 x-y 平面上具有几乎恒定的方位角。 该模块提供了多种选项：可以仅选择具有特定方向的系列，可以为系列设定最小长度，还可以对 z 值和/或 x, y 值进行高通或低通滤波。 split 是数据提取与 wiggle 绘图之间非常有用的过滤器，也可用于将大型 x, y [, z] 数据集划分为若干分段。

## 语法

gmt split [ table ] [ `-A` azimuth/tolerance ] [ `-C` course_change] [ `-D` minimum_distance ] [ `-F` xy_filter/z_filter ] [ `-N` template ] [ `-Q` flags ] [ `-S` ] [ `-V`[level] ] [ `-bi` binary ] [ `-bo` binary ] [ `-d` nodata[+c col] ] [ `-e` regexp ] [ `-f` flags ] [ `-g` gaps ] [ `-h` headers ] [ `-i` flags ] [ `-q` flags ] [ `-s` flags ] [ `-:`[i|o] ] [ --PAR=value ]

## 输入数据

table

  输入表文件，可以为 2 列，3 列或者 5 列，数据值为 (x,y,[z[,d,h]])。 默认情况下认为输入只包含 3 列，若输入数据为 5 列，使用 `-S` 选项确保 d 不是递减的

## 可选选项

-A

-A azimuth/tolerance

  计算方位角，只输出和方位角 azimuth 相差小于 tolerance 的段

-C

-C course_change

  当检测到航向发生变化且超过 course_change 时，结束该航段

-D

-D minimum_distance

  输出总长度大于 minimum_distance 的段，默认值为 0

-F

-F xy_filter/z_filter

  对数据进行滤波，假定数据为 d 列（x 的增量）的函数。xy_filter 和 z_filter 分别为 x，y 值和 z 值的滤波的长度，单位和距离单位相同（见 `-S` ）。如果长度 为 0 ，即不进行滤波。滤波长度的绝对值的是余弦滤波总的窗口宽度，如果长度为 正值，则数据为低通滤波，如果为负值，则为高通滤波。如果 z_filter 不为 0，则 在拆分之前对数据滤波，因此边缘效应只会发生在整体数据的开始和结尾处，在每段数据 的头尾则不会有。如果 xy_filter 不为 0，数据将先被拆分，然后对每段的 x 和 y 值滤波，即在每段首尾都可能存在边缘效应，但是可以避免低通滤波将测线拐弯处舍入。

-N

-N template

  将拆分后的每段都单独输出到文件 [默认在一个文件输出所有段]。可以追加一个格式化 的文件模版，必须使用 C 语言格式的语法，例如 %d 表示整数，%08d 表示宽度为 8 的 整数，位数不够则在前面补 0 [默认模版为 gmtsplit_segment_%d.{txt|bin}，后缀与 输出文件格式有关]。或者给出一个带有两个 C 语言格式的模版，使用表数据的编号和 段号生成文件名。

-Q

-Q flags

  设置输出列包含 xyzdh 中的哪些列以及其顺序，中间不需要使用空格，且必须使用小写 字母，默认为 `-Q` xyzdh ；如果输入只包含两列，则为 `-Q` xydh 。

-S

-S

  支持包含 d 和 h 的列，这时输入数据为 x,y,z,d,h。其中 d 和 h 分别表示 x 的增量和 y 的增量。使用 `-f` g 时，数据为地理坐标，x 和 y 的坐标单位为度，增量的单位均 为 km，角度为方位角。若为笛卡尔坐标，距离的单位和 x 以及 y 相同，角度从水平方向 开始顺时针计算。

-V

-V[level]

  设置 verbose 等级 [w]。 (参数详细介绍)

-bi

-bi[ncols][type][w][+l|b]

  控制二进制文件的输入格式。 (参数详细介绍)

> 默认输入列为 2、3 或 5 列，由 `-S` 选项设置。

-bo

-bo[ncols][type][w][+l|b]

  控制二进制文件的输出格式。 (参数详细介绍)

> 默认输出为 1-5 列，由 `-Q` 选项设置。

-d

-d[i|o]nodata

  将某些特定值当作 NaN。 (参数详细介绍)

-e

-e[~]"pattern" | -e[~]/regexp/[i]

  筛选或剔除匹配指定模式的数据记录。 (参数详细介绍)

-f

-f[i|o]colinfo

  显式指定当前输入或输出数据中每一列的数据类型。 (参数详细介绍)

-g

-g[a]x|y|d|X|Y|D|[col]z gap[+n|p]

  确定数据或线段的间断。 (参数详细介绍)

> 不要让单个分段中存在超过 gap 的间隙；一旦检测到，则将其拆分为两个分段 [默认忽略间隙]。

-h

-h[i|o][n][+c][+d][+m segheader][+r remark][+t title]

  在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)

-i

-i cols[+l][+s scale][+o offset][,...][,t[word]]

  对输入的数据进行列选择以及简单的代数运算。 (参数详细介绍)

-q

-q[i|o][~]rows[+c col][+a|f|s]

  对输入或输出的行进行筛选，该选项在一定程度上可以代替 gawk 的某些功能。 (参数详细介绍)

-s

-s[cols][+a|+r]

  设置 NaN 记录的处理方式。 (参数详细介绍)

-:

-:[i|o]

  交换输入或输出数据的前两列。 (参数详细介绍)

-^ 或 -

  显示简短的帮助信息，包括模块简介和基本语法信息（Windows下只能使用 -）

-+ 或 +

  显示帮助信息，包括模块简介、基本语法以及模块特有选项的说明

-? 或无参数

  显示完整的帮助信息，包括模块简介、基本语法以及所有选项的说明

--PAR=value

  临时修改GMT参数的值，可重复多次使用。参数列表见 配置参数

## ASCII 格式精度

ASCII 格式输出数据通过 gmt.conf 配置文件控制。控制经纬度格式的参数为 FORMAT_GEO_OUT ；控制绝对时间的的参数包括 FORMAT_DATE_OUT 和 FORMAT_CLOCK_OUT ；普通浮点数通过参数 FORMAT_FLOAT_OUT 控制。上述格式控制可能会导致精度损失，这会在下游计算中导致一些问题。 如果用户需要保证数据精度，则应考虑将数据写为二进制文件，或者使用 FORMAT_FLOAT_OUT 指定更多的有效数字。

## 距离计算

输入数据的类型由 `-f` 选项决定。如果给定了 `-f` g ，则 x, y 以经度、纬度度数表示，距离单位为千米，角度为方位角。 否则，距离为与 x, y 单位相同的笛卡尔距离，且角度是从水平方向起逆时针旋转的角度。

## 示例

使用 NCEI 提供的 JA020015 航次中 -R300/315/12/20 范围内东西方向的测线绘制磁异常的 wiggle 图，并对测线进行 100 km 的低通滤波和 500 km 的高通滤波

    gmt mgd77list JA020015 -R300/315/12/20 -Flon,lat,mag,dist,azim |\
        gmt split -A90/15 -F100/-500 -D100 -S -V -fg |\
        gmt wiggle -R300/315/12/20 -Jm0.6i -Baf -B+tJA020015 -T1 \
        -W0.75p -Ggray -Z200 -pdf JA020015_wiggles

原始测量数据为 MGD77 格式，因此建议使用 mgd77list 模块提取 dist 和 azim 而不是使用 split 计算。

将一个包含经纬度以及重力观测值的二进制双精度文件，拆分为 survey_xxxx.txt 形式的一系列 文件，拆分原则为间隙大于 100 km

    gmt split survey.bin -Nsurvey_%03d.txt -V -gd100k -D100 -: -fg -bi3d

## 相关模块

filter1d, mgd77list, wiggle