介绍
在本指南中,我将向您展示如何对分隔文件中的数据以及其他命令的输出进行排序。
了解用于执行此任务的命令称为“排序”,您不会感到惊讶。本文将提供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开关允许您选择分隔符。
为了让自己真正感到高兴,Dundee United的粉丝可以使用以下命令按第4列进行排序:
sort -k4 -t,spl
现在邓迪联队排名第一,凯尔特人排在最后。
当然,这会让凯尔特人和邓迪的球迷都非常不高兴。为了使事情正确,您可以使用以下开关按相反顺序排序:
sort -k4 -t,-r spl
一个相当离奇的开关让你可以随机排序,这实际上只会混淆数据行。
您可以使用以下命令执行此操作:
sort -k4 -t,-R spl
如果混淆了-r和-R开关,这可能会导致实际问题。
sort命令还可以将日期按月顺序排序。为了演示看下表:
月 | 使用的数据 |
---|---|
一月 | 4G |
二月 | 3000K |
游行 | 6000K |
四月 | 100M |
可以 | 5000M |
六月 | 200K |
七月 | 4000K |
八月 | 2500K |
九月 | 3000K |
十月 | 1000K |
十一月 | 3G |
十二月 | 2G |
上表表示一年中的某个月以及移动设备上使用的数据量。
您可以使用以下命令按字母顺序对日期进行排序:
sort -k1 -t,datausedlist
您还可以使用以下命令按月排序:
sort -k1 -t,-M datausedlist
现在显然上面的表已经按月顺序显示了它们,但如果列表是随机填充的,那么这将是一种简单的排序方式。
查看第二列,您可以看到所有值都是人类可读的格式,看起来不太容易排序,但sort命令可以使用以下命令对数据使用列进行排序:
sort -k2 -t,-h datausedlist
如何对从其他命令传递的数据进行排序
虽然对文件中的数据进行排序很有用,但sort命令也可用于对其他命令的输出进行排序:
例如,查看ls命令:
ls -lt
上面的命令将每个文件作为一行数据返回,并在列中显示以下字段:
- 权限
- 节点数
- 用户名
- 团队名字
- 尺寸
- 最后访问日期
- 文件名
您可以通过运行以下命令按文件大小对列表进行排序:
ls -lt | sort -k5
要以相反的顺序获得结果,您将使用以下命令:
ls -lt | sort -k5 -r
sort命令还可以与ps命令一起使用,该命令列出系统上运行的进程。
例如,在您的系统上运行以下ps命令:
ps -eF
上面的命令返回有关系统上当前正在运行的进程的大量信息。
其中一列是大小,您可能希望查看哪些进程最大。
要按大小对此数据进行排序,请使用以下命令:
ps -eF | sort -k5
摘要
sort命令没什么用,但是当将其他命令的输出排序为有意义的顺序时,它可以很快变得有用,特别是当命令没有自己的排序开关可用时。
有关更多信息,请阅读sort命令的手册页。