gmtconvert

贡献者:

周茂

最近更新日期:

2022-06-30


官方文档:

gmtconvert

简介:

对表数据进行格式转换,粘贴以及提取列等操作

convert 模块读取文件(或从标准输入读取)并将所需信息输出到标准输出。该模块可完成如下任务及其组合:

  1. 在二进制数据和 ASCII 数据之间转换

  2. 将多个文件中的数据记录在水平方向合并(类似于类 Unix 系统下的 paste 命令)

  3. 提取某些列

  4. 在多段数据记录中,根据头段信息的匹配结果提取数据记录

  5. 只列出段头信息,不显示数据记录

  6. 提取每个数据段的第一个和/或最后一个数据记录

  7. 将输出数据记录进行反转

  8. 仅输出段编号的范围

  9. 根据数据段中数据记录个数输出相匹配的段

输入以及输出都可能包含多个头部信息。

语法

gmt convert [ table ] [ -A ] [ -C[+lmin][+umax][+i]] [ -D[template[+oorig]] ] [ -E[f|l|m|Mstride] ] [ -F[c|n|p|v][a|t|s|r|refpoint] ] [ -I[tsr] ] [ -L ] [ -Ncol[+a|d] ] [ -Q[~]selection] [ -S[~]“search string”|+f|file[+e] | -S[~]/regexp/[i][+e] ] [ -T[h][d[[~]selection]] ] [ -V[level] ] [ -W[+n] ] [ -aflags ] [ -bbinary ] [ -dnodata[+ccol] ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -oflags ] [ -qflags ] [ -sflags ] [ -wflags ] [ -:[i|o] ] [ --PAR=value ]

必选选项

table

一个或多个ASCII或二进制表数据。若不提供表数据,则会从标准输入中读取。

可选选项

-A

对输入输出进行水平合并 [默认使用垂直合并]。所有文件的数据段数以及每个数据段内的行数必须是相同的。对于二进制文件输入,则所有文件必须具有相同的列数;对于 ASCII 文件输入,则数据列数可以不同。

-C[+lmin][+umax][+i]

仅输出记录数与给定条件匹配的数据段。以下的子选项含义分别为:

  • +lmin 数据段中的数据个数大于 min [默认为 0]

  • +umax 数据段中的数据个数小于 max [默认为无穷大]

  • +i 对选择进行反转

-D[template[+oorig]]

对于多段数据,将每个段输出到一个单独的文件中 [默认输出到一个单独的文件]。template 为输出文件的格式模版,该模版由 C 语言格式定义:%d 为整数,%08d 为 8 位整数,位数不够则在前面补 0。默认输出模版为 gmtconvert_segment_%d.{txt|bin}。 +oorig 表示从 orig 开始编号而不是从 0 开始编号。或者可以使用带有两个 C 语言格式说明符的模版,分别为表数据的编号以及段数据的编号。+otorig/sorig 则用来设置表数据和段数据编号的起始值。

-E[f|l|m|Mstride]

仅提取选定的数据段的第一条和最后一条数据记录 [默认输出所有记录]。

  • f 只提取第一条数据记录

  • l 只提取最后一条数据记录

  • mstride 表示每 stride 个提取一个数据,如果为 M ,则还包括最后一个数据记录

-F[c|n|p|v][a|t|s|r|refpoint]

改变点的连接方式以及数据分组的方式。点的连接方式分为:

  • c 每组数据都形成连续的线作为单独的数据段 [默认]

  • p 在每组数据中以参考点和每个点组成单独的线段

  • n 将每组数据中的点都互相连接构成网

  • v 将每组数据中的点构成向量,以方便 plot -Sv+s 选项使用

数据分组的方式包括:

  • a 忽略所有段头信息,直接将所有数据段合并,将参考点设置为第一个文件的第一个点

  • t 将同一个文件中的所有数据段合并,参考点设置为每个组的第一个点

  • s 每个数据段都作为一个单独的组,参考点为第一个点

  • rs 相同,但是参考点设置为每个点

除上述的参考点设置方式外,还可指定一个参考点 refpoint 替换程序内部参考点。

-I[tsr]

将 “item” 的顺序进行反转。

  • t 表示对输出的多个表文件进行反转

  • s 将每个表文件中数据段进行反转

  • r 将每个数据段中的数据记录反转 [默认]

-L

只输出所有段头信息,不输出数据记录(仅用于 ASCII 文件)

-Ncol[+a|d]

每个数据段中的 col 列按数值大小进行排序。+a 升序 [默认],+d 降序。 -N 选项与 -F 选项不能同时使用,可与其他选项同时使用。与其他选项同时使用时, -N 选项将放在最后应用

-Q[~]selection

只输出指定的编号的数据段。该选项不能和 -S 选项同时使用。selection 的语法为 range[,range,…] ,其中 range 是单个段号或者为一个 start[:step:]:stop 格式指定的一系列段号,step 为增量,是可选的,在不指定的情况下默认为 1。~ 表示反转选择。还可使用 +ffile 指定一个段号文件,其中每行均包含一个段号。

-S[~]“search string”|+f|file[+e] | -S[~]/regexp/[i][+e]

只输出头段记录中包含指定字符串的数据段,使用 ~ 可以用来反转选择,即输出不包含指定字符串的数据段。如果指定的字符串刚好以 ~ 开头,则需要使用反斜杠进行转义。该选项不能和 -Q 选项同时使用。对于 OGR/GMT 格式的文件,可以使用 varname=value 的形式提取数据段。如果存在多个字符串,可使用 +ffile 选项,将字符串存放在一个文件 file 中,每行均为一个单独的字符串。 :如果数据段的属性为多边形,且多边形中间有孔,则输出时会同时输出孔。该选项还可使用正则表达式 regrexp 提取数据段,为与字符串提取的方式区别,正则表达式必须置于斜杠中。i 选项表示匹配时不区分大小写。 +e 字符串表示完全匹配字符串,即字符串完全相等,而不包括作为子字符串匹配的结果 [默认包含子字符串的结果]。

-T[h][d[[~]selection]]

禁止输出某些信息。

  • h 禁止输出段头 [默认]

  • d 对于重复的数据,只输出一次。

上述两个子选项可以同时使用。默认情况下,两条记录的所有列都相同才被认为是重复的数据,但可通过 selection 来设置只比较选定的列,若这些列相同,即被认为是重复的数据。selection 的格式为 range[,range,…],range 可以为单独的列号,或者为 start[:step:]:stop 定义的一组列号,step 为步长,默认为 1。~ 用来反转选择。如果要考虑数据后的文本的比较,则在 selection 的最后添加 t ,如果不指定数字列,则只考虑最后的文本比较。

-W[+n]

将每个数据记录中最后的本文中的词转换为数字,并将这些数字追加到输出结果中。无法转换的词将设置为 NaN。使用 +n 可禁止输出包含 NaN 的数据行。

-V[level] (more …)

设置 verbose 等级 [w]

-acol=name[,…] (more …)

设置非空间数据项与数据列之间的对应关系

-bi[ncols][type][w][+l|b] (more …)

设置二进制输入数据的格式

-bo[ncols][type][w][+l|b] (more …)

设置二进制输出的数据格式

-d[i|o]nodata (more …)

将输入数据中等于 nodata 的记录替换为 NaN,或将输出数据中值为 NaN 的记录替换为 nodata

-e[~]“pattern” | -e[~]/regexp/[i] (more …)

筛选或剔除匹配指定模式的数据记录

-f[i|o]colinfo (more …)

指定输入或输出列的数据类型

-g[a]x|y|d|X|Y|D|[col]zgap[+n|p] (more …)

确定数据或线段的间断

-h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle] (more …)

跳过或生成指定数目的头段记录

-icols[+l][+sscale][+ooffset][,][,t[word]] (more …)

设置输入数据列及简单变换(0表示第一列,t 表示文本列)

-ocols[,…][,t[word]] (more …)

设置输出数据列(0表示第一列,t 表示文本列)

-q[i|o][~]rows[+ccol][+a|f|s] (more …)

筛选输入或输出的行或数据范围

-s[cols][+a|+r] (more …)

设置 NaN 记录的处理方式

-wy|a|w|d|h|m|s|cperiod[/phase][+ccol] (more …)

将输入坐标转换为循环坐标

-:[i|o] (more …)

交换输入或输出中的第一和第二列

-^-

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

-++

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

-? 或无参数

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

--PAR=value

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

ASCII 格式精度

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

示例

将二进制文件 test.b (单精度)转换为 4 列的 ASCII 文件

gmt convert test.b -bi4f > test.dat

将多段 ASCII 表数据 test.txt 转换为双精度二进制文件

gmt convert test.txt -bo > test.b

left.txt (共两列)的第二列和 right.txt 的第一列作为坐标输入并绘制。这里的思路是:先使用 -A 选项将两个文件水平方向合并,在合并后的结果中提取数据

gmt convert left.txt right.txt -A -o1,2 | gmt plot ...

在文件 big_file.txt 中提取头段中包含字符串“RIDGE AXIS”的所有数据段

gmt convert big_file.txt -S"RIDGE AXIS" > subset.txt

在上述文件中提取头段中包含“Spitsbergen”的数据段,且必须完全匹配

gmt convert big_file.txt -SSpitsbergen+e > subset.txt

选区所有不存在以“profile”开头,且后面为整数和 g 到 l 的任意字符的段头的数据段

gmt convert -S~"/^profile [0-9]+[g-l]$/"

对表数据文件中的段的顺序反转,但反转段中数据的顺序

gmt convert lots_of_segments.txt -Is > last_segment_first.txt

以 2 为步长,提取段号为 20 到 40,以及段号为 0 的数据段

gmt convert lots_of_segments.txt -Q0,20:2:40 > my_segments.txt

假定存在如下 OGR/GMT 格式的文件

# @VGMT1.0 @GPOINT
...
# @NELEVATION|DISPX|DISPY
# @Tdouble|double|double
# FEATURE_DATA
# @D4.945000|-106500.00000000|-32700.00000000
-9.36890245902635 39.367156766570389

对上述文件,使用 -aflags 提取属性 ELEVATION 的数据(下述两种等价)

gmt convert file.gmt -a2=ELEVATION > xyz.dat
gmt convert file.gmt -aELEVATION > xyz.dat

将文件 sensors.txt 中的所有点与指定的远点 23.5/19 相连

gmt convert sensors.txt -F23.5/19 > lines.txt

将文件 A.txtB.txt 中的所有数据段写到 profile_005000.txt,profile_005001.txt … 等单独的文件中:

gmt convert A.txt B.txt -Dprofile_%6.6d.txt+o5000

从文件中提取 100-200 以及 500-600 行

gmt convert junk.txt -q100-200,500-600 > subset.txt

提取除了 1000-2000 行以外的所有行

gmt convert junk.txt -q~1000-2000 > good.txt

相关模块

gmtinfo, gmtselect