Linux command - sort
這篇紀錄了如何用 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” 來排序,就成了我要的東西了。
當然還有很多參數可以使用,就先記到這邊,之後有用到再補充囉。