-i 和 -o 选项¶
-i 和 -o 选项分别用于对输入和输出的数据进行列选择以及简单的代数运算。
经常遇到的情况是,已有的数据有很多列,而某个命令只需要其中的某几列;或者某个命令的默认输出有很多列,却只想要输出其中的某几列。
-i 选项可以从输入数据中选择任意列,并对其进行四则运算以及取对数操作。其语法为:
-icols[+l][+sscale][+ooffset][,…][,t[word]]
-o 选项用于输出指定的列。其基本语法为:
-ocols[,…][,t[word]]
-i 和 -o 选项后接以逗号分隔的列号(列号从0开始)或列号范围,以指定输入/输出数据中需要保留的列及其顺序。列号范围的格式为 start[:inc]:stop,若省略 inc 则默认其值为1;若 stop 省略则一直读到最后一列。每一列均可重复多次出现。
若输入数据中既包含数值列也包含文本列,在不使用 -i 选项时,默认会读入所有列;而使用 -i 选项时,默认会丢弃所有尾部文本列。可以加上 t 以保留文本列,进一步可以指定 word 以指定保留文本列的第几列。
- -in 表示只读入数值列,而忽略所有尾部文本列
- -on 表示只输出数值列,而忽略所有尾部文本列
- -ot 表示只输出文本列,而忽略所有数值列
对于 -i 选项而言,每个列号后还可以加上子选项以对每列数据进行简单的代数运算:
- +l 表示对当前列取 \(\log_{10}\)
- +sscale 表示将当前列乘以比例因子 scale
- +ooffset 表示将当前列的值加上 offset
举几个例子:
- -i3,6,2 表示读入数据中的第4、7、3列
- -o3,1,3 表示输出数据中的第4、2、4列,即第四列会被输出两次
- -i1:3,5 表示读入数据中的2-4列和第6列
- -i2+s2+o10,6,3 表示读入数据的第3、7、4列,并对第3列数据乘以2再加上10
下面再举几个具体的实例:
取输入的1-3列:
$ echo 0 1 2 3 4 TEXT0 TEXT1 TEXT2 | gmt select -i1:3
1 2 3
取输入的第2列并乘以10加上5,并取第三列之后的所有列:
$ echo 0 1 2 3 4 TEXT0 TEXT1 TEXT2 | gmt select -i1+s10+o5,2:
15 2 3 4
在上例基础上,取输入的所有文本列:
$ echo 0 1 2 3 4 TEXT0 TEXT1 TEXT2 | gmt select -i1+s10+o5,2:,t
15 2 3 4 TEXT0 TEXT1 TEXT2
在上例基础上,只取文本列的第2列:
$ echo 0 1 2 3 4 TEXT0 TEXT1 TEXT2 | gmt select -i1+s10+o5,2:,t1
15 2 3 4 TEXT1