如何使用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命令的手册页。