-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