-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