UNIX 文字工具: 欄位排序

sort 可以在相當程度下處理資料表。若說

sort student.dat
所得的結果應該是
86014000 徐珍聖 M xuzs
86110900 王琇凱 M wangxk
87015800 褚永培 F chuyp
87007900 周淑文 F zhousz
87113600 鄒男鈞 M zounj
87114100 杜霖雅 F dulx
87250500 蔡君宗 M caijz
因為沒有兩個人的學號一樣,所以這就相當於是對學號做排序。 而且,其效果與
sort -n student.dat
相同,因為學號全都是八位數。

sort 可以更精確地針對欄位資料排序。 只要以 -t ' ' 告訴 sort:欄位隔間符號 (field separator) 是空格。 隔間符號本身不會 (也不能) 屬於任何欄位內的資料。 如果連續出現兩個隔間符號,例如兩個空格,sort 會認為它們之間有一個空的欄位。 因此,作為資料表格的文字檔,要非常小心這個現象。

然後以 -k N 告訴 sort 要針對第 N 個欄位排序。 其中 N 是一個正整數,欄位的編號從 1 數起。 所以,

sort student.dat
的效果和
sort -t ' ' -k 1 student.dat
的效果完全一樣。

但是,

sort -t ' ' -k 3 student.dat
就有趣了,它是要 sort 按照性別排序,結果是
87015800 褚永培 F chuyp
87114100 杜霖雅 F dulx
87007900 周淑文 F zhousz
87250500 蔡君宗 M caijz
86110900 王琇凱 M wangxk
86014000 徐珍聖 M xuzs
87113600 鄒男鈞 M zounj
當第 N 個欄位資料相同時,sort 按照第 N+1 個欄位的資料來排序,依此類推。 同理,以下指令是要 sort 按照帳號名來排序:
sort -t ' ' -k 4 student.dat

更精細地,

sort -t ' ' -k 1.3 student.dat
是要 sort 按照第 1 個欄位內的第 3 個字元來排序。結果是
86014000 徐珍聖 M xuzs
87015800 褚永培 F chuyp
87007900 周淑文 F zhousz
86110900 王琇凱 M wangxk
87113600 鄒男鈞 M zounj
87114100 杜霖雅 F dulx
87250500 蔡君宗 M caijz
當第 3 個字元相同的時候,sort 按照第 4 字元來排序,依此類推。 這樣做的結果,可以做一般生、甄試生、轉學生的分類 (以中大的學號規則而言)。

習題

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: Nov 19, 2000
Last Revised: Nov 19, 2000
© Copyright 2000 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw