-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 convert -i1:3
1   2       3

取输入的第2列并乘以10加上5,并取第三列之后的所有列:

$ echo 0 1 2 3 4 TEXT0 TEXT1 TEXT2 | gmt convert -i1+s10+o5,2:
15  2       3       4

在上例基础上,取输入的所有文本列:

$ echo 0 1 2 3 4 TEXT0 TEXT1 TEXT2 | gmt convert -i1+s10+o5,2:,t
15  2       3       4       TEXT0 TEXT1 TEXT2

在上例基础上,只取文本列的第2列:

$ echo 0 1 2 3 4 TEXT0 TEXT1 TEXT2 | gmt convert -i1+s10+o5,2:,t1
15  2       3       4       TEXT1