-q 选项¶
-q 选项用于对输入或输出的行进行筛选,该选项在一定程度上可以代替 gawk 的某些功能。其基本语法为:
-q[i|o][~]rows[+ccol][+a|f|s]
i 和 o 分别表示只作用于输入或输出。
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和第6行:
$ 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