這篇紀錄了如何用 Linux command sort 來將資料進行排序。

以前只會使用 default 的 sort 來做排序,今天才開始研究 sort 的其他參數。開始之前,一樣先來個參考網站連結

sort - sort lines of text files
Write sorted concatenation of all FILE(s) to standard output.

簡潔有力的說明,沒錯它就是來對文件做排序的。

來一份要排序的資料:

N 了不起|ADJ 10
ADJ 運作|V 38
V 了不起|ADJ 12
N 善良|ADJ 23
N 喜悅|ADJ 13
V 了不起|ADJ 36
N 遺憾|V 11
V 了不起|ADJ 58
N 遺憾|V 73
V 遺忘|V 10
V 了不起|ADJ 14
V 遺憾|V 61
ADJ 看起來|ADV 25
N 善良|ADJ 10
N 看起來|ADV 23
ADJ 運作|V 14
ADJ 運到|V 15
ADJ 看起來|ADV 21

如果不對 sort 設定任何參數,排起來會長這樣:

也就是說,它會自動根據空白(包括tab)把每一行斷開,然後根據被斷開的每個位置做排序。以這個例子來說,sort會對第一欄 TAG 排序一次,然後是第二欄的 “文字|tag”,最後是被tab斷開的數值。但是在這份文件裡,我希望以 “TAG 文字|tag” 為 key 來做排序,也就是說我希望所有的 “N 善良|ADJ” 可以被排在一起,而不是像預設的結果一樣被分散。

於是乎,參考連結就派上用場了。不看不知道,一看才發現有很多的參數可以設定。

這裡我用的解法是用 -k 讓它根據我所指定的欄位來排序:

-k, --key=POS1[,POS2]
start a key at POS1, end it at POS 2 (origin 1)

於是結果就變成了這樣:

這就是 -k 的作用,根據第一欄 “TAG” 和第二欄 “文字|tag” 來排序,就成了我要的東西了。

當然還有很多參數可以使用,就先記到這邊,之後有用到再補充囉。