-q 选项

-q 选项用于对输入或输出的进行筛选,该选项在一定程度上可以代替 gawk 的某些功能。其基本语法为:

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

io 分别表示只作用于输入或输出。

rows 用于指定要读入的行号或行号范围,多个行号或行号范围间用逗号分隔。 行号范围的格式为 start[:inc]:stop,若未指定 inc 则默认为1。

默认情况下(即 +a),行号是在整个数据集(多个文件算作一个数据集)中不断递增的; 使用 +f 表示对每个文件分别计算行号;使用 +s 表示对每个数据段分别计算行号。 需要注意的是,文件头段记录或数据段记录不算在行号内,只有数据记录才计算行号。

也可以加上 +ccol 以限制第 col 列的范围。此时,rows 的格式为 start/stop,即这一列的最小范围和最大范围。若省略 stop (但不省略 /), 则表示从 start 起一直读或写到最后一行。

-q 选项开始处加上 ~ 可实现反向操作,即只输入或输出不符合 rows 限制的 范围的数据。

举几个例子,假如输入数据是一个包含两段的数据:

>
0  0  0
1  1  1
2  2  2
3  3  3
4  4  4
>
5  5  5
6  6  6
7  7  7
8  8  8
9  9  9

只读入数据的第1和第4行:

$ gmt convert input.dat -q0,3
0   0       0
3   3       3

读入数据的第2-4行以及第8行之后的行:

$ gmt convert input.dat -q1:3,7
>
1   1       1
2   2       2
3   3       3
>
7   7       7

对于多段数据,每段单独计算行号,读入每段数据的第2至4行:

$ gmt convert input.dat -q1:3+s
>
1   1       1
2   2       2
3   3       3
>
6   6       6
7   7       7
8   8       8

检查第3列数据,只保留其值在4到8之间的记录:

$ gmt convert input.dat -q4:8+c2
>
4   4       4
>
5   5       5
6   6       6
7   7       7
8   8       8