介紹
在本指南中,我將向您展示如何對分隔文件中的數據和其他命令的輸出進行排序。
如果您知道用於執行此任務的命令稱為“排序”,您將不會感到驚訝。 本文將提供sort命令的所有主要開關。
樣本數據
只要文件以某種方式分隔,文件中的數據就可以排序。
例如,讓我們去年從蘇格蘭超級聯賽的最後排名表中,將數據存儲在一個名為“spl”的文件中。
您可以創建一個數據文件,如下所示,一個俱樂部和該俱樂部的數據在每一行中用逗號分隔。
球隊 | 目標得分 | 目標反對 | 點 |
---|---|---|---|
塞爾特 | 93 | 31 | 86 |
阿伯丁 | 62 | 48 | 71 |
心 | 59 | 40 | 65 |
聖約翰斯通 | 58 | 55 | 56 |
馬瑟韋爾 | 47 | 63 | 50 |
羅斯縣 | 55 | 61 | 48 |
因弗內斯 | 54 | 48 | 52 |
鄧迪 | 53 | 57 | 48 |
Partick | 41 | 50 | 46 |
漢密爾頓 | 42 | 63 | 43 |
基爾馬諾克 | 41 | 64 | 36 |
鄧迪聯隊 | 45 | 70 | 28 |
如何對文件中的數據進行排序
從該表中,你可以看到凱爾特人贏得了聯賽,鄧迪聯隊最終取得了勝利。 如果你是鄧迪聯隊球迷,你可能想讓自己感覺更好,你可以通過對進球進行排序來做到這一點。
為此,運行以下命令:
sort -k2 -t,spl
這次訂單如下:
- Partick
- 基爾馬諾克
- 漢密爾頓
- 鄧迪聯隊
- 馬瑟韋爾
- 鄧迪
- 因弗內斯
- 羅斯縣
- 聖約翰斯通
- 心
- 阿伯丁
- 塞爾特
結果按此順序排列的原因是第2列是進球得分列,排序從最低到最高。
-k開關允許您選擇要排序的列,-t開關允許您選擇分隔符。
為了讓自己真正開心,鄧迪聯隊的粉絲可以使用以下命令按列4排序:
sort -k4 -t,spl
現在鄧迪聯隊排名第一,凱爾特人位居榜首。
當然,這會讓凱爾特人隊和鄧迪球迷非常不滿。 要把事情做對,你可以使用下面的開關以相反的順序排序:
sort -k4 -t,-r spl
一個相當奇怪的開關讓你隨機排序,這實際上只是亂拼成一排數據。
您可以使用以下命令執行此操作:
sort -k4 -t,-R spl
如果您混淆了-r和-R開關,這可能會導致真正的問題。
排序命令也可以按月份順序對日期進行排序。 為了演示看看下表:
月 | 使用的數據 |
---|---|
一月 | 4G |
二月 | 3000K |
遊行 | 6000K |
四月 | 100M |
可能 | 5000M |
六月 | 200K |
七月 | 4000K |
八月 | 2500K |
九月 | 3000K |
十月 | 1000K |
十一月 | 3G |
十二月 | 2G |
上表列出了一年中的月份和移動設備上使用的數據量。
您可以使用以下命令按字母順序對日期進行排序:
sort -k1 -t,datausedlist
您還可以使用以下命令按月排序:
sort -k1 -t,-M datausedlist
現在很明顯,上面的表格已經按月份順序顯示了它們,但是如果列表是隨機填充的,那麼這將是對它們進行排序的簡單方法。
查看第二列,您可以看到所有值都是以人類可讀的格式顯示的,看起來並不容易排序,但排序命令可以使用以下命令對使用的數據列進行排序:
sort -k2 -t,-h datausedlist
如何對從其他命令傳入的數據進行排序
雖然對文件中的數據進行排序很有用,但排序命令也可用於對其他命令的輸出進行排序:
例如,查看ls命令 :
ls -lt
上述命令將每個文件作為一行數據返回,並在列中顯示以下字段:
- 權限
- 節點數
- 用戶名
- 團隊名字
- 尺寸
- 上次訪問日期
- 文件名
您可以通過運行以下命令按文件大小對列表進行排序:
ls -lt | 排序-k5
要以相反的順序得到結果,你可以使用下面的命令:
ls -lt | sort -k5 -r
sort命令還可以與列出系統上運行的進程的ps命令結合使用。
例如,在您的系統上運行以下ps命令:
ps -eF
以上命令返回有關係統上當前正在運行的進程的大量信息。
其中一列是大小,你可能想看看哪些進程是最大的。
要按大小對這些數據進行排序,您可以使用以下命令:
ps -eF | 排序-k5
概要
排序命令沒有太多內容,但在將其他命令的輸出排序為有意義的順序時,它可以非常快速地變得有用,特別是當命令沒有自己的排序開關時。
有關更多信息,請閱讀sort命令的手冊頁。