介绍
在本指南中,我将向您展示如何对分隔文件中的数据和其他命令的输出进行排序。
如果您知道用于执行此任务的命令称为“排序”,您将不会感到惊讶。 本文将提供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命令的手册页。