如何使用Linux對文件中的數據進行排序

介紹

在本指南中,我將向您展示如何對分隔文件中的數據和其他命令的輸出進行排序。

如果您知道用於執行此任務的命令稱為“排序”,您將不會感到驚訝。 本文將提供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

這次訂單如下:

結果按此順序排列的原因是第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命令的手冊頁。