前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在命令行进行sort排序【Linux-Command line】

在命令行进行sort排序【Linux-Command line】

作者头像
QRosie
修改2019-11-18 11:57:37
2.3K0
修改2019-11-18 11:57:37
举报

使用sort命令重组数据,可以从Linux,BSD或Mac终端以对你有意义的格式进行。

如果你曾经使用过电子表格应用程序,那么你就会知道行可以按列的内容排序。 例如,如果有一个支出清单,你可能想要按日期,价格升序或类别等因素对它们进行排序。 如果习惯使用终端,你可能不希望仅为了进行文本数据排序就启用大型office应用程序。 这时正好让sort命令发挥作用。

安装

你不需要安装sort,因为它包含在任意POSIX系统内。 在大多数Linux系统上,sort命令捆绑在GNU组织的一组实用程序中。 在其他POSIX系统(例如BSD和Mac)上,默认的sort命令不是来自GNU的,因此某些选项可能有所不同。 在本文中,我将尝试说明GNU和BSD的实现。

按字母顺序对行排序

在默认情况下,sort命令查看文件每一行的第一个字符,并以字母升序输出每一行。 如果多行中的两个字符相同,则会考虑下一个字符。 例如:

使用sort不会更改原始文件。 排序是一个过滤器,因此,如果要以排序形式保留数据,则必须使用“>”或“tee”重定向输出:

按列排序

有时,复杂数据集需要按除每行首字母之外的其他内容排序。 例如,想象一下一个动物列表,以及每个动物的物种和属,每个“字段”(电子表格中的“单元”)都由可预测的分隔符定义。 这是电子表格导出的一种通用数据格式,CSV(逗号分隔值)文件扩展名可以识别此类文件(尽管CSV文件不必以逗号分隔,分隔文件也不必使用 CSV扩展名以确保有效且可用)。 考虑以下示例数据集:

根据此示例数据集,您可以使用“--field-separator”选项(在BSD和Mac上使用“-t”,或者在GNU上减少键入),选项将分隔字符设置为分号(该示例使用分号而不是逗号, 但可以使用任何字符),并使用“--key”(在BSD和Mac上为“-k”,或者在GNU上减少键入)选项定义要作为排序依据的字段。 例如,要按每行的第二个字段(从1开始,而不是0)排序:

这有点难以理解,但是Unix以其构造命令的管道方法而闻名,因此你可以使用column命令来“整理”输出。 使用GNU列:

BSD和Mac上的命令选项对新用户来说有点晦涩难懂(但类型更短):

当然,key定义不必设置为2。 任何现有字段都可以用作排序关键字。

反向排序

你可以使用“--reverse”(为简明起见,可在BSD或Mac或GNU上写为“-r”)来反转排序列表的顺序:

通过tac进行常规排序输出传递,你可以得到相同的结果。

按月排序(仅GNU)

在理想的情况下,每个人都会根据ISO 8601标准写日期:年,月,日。 这是指定唯一日期的逻辑方法,计算机很容易理解。 但是,人们经常使用其他方式来识别日期,包括命名不太规律的月份。

幸运的是,GNU sort命令解决了这个问题,并且能够按月份名称正确排序。 使用“--month-sort(-M)”选项:

月份可以通过其全名或名称的某些部分来标识。

可读数字排序(仅GNU)

人与计算机之间另一个常见的混淆点是数字组。 例如,人类经常将“ 1024 KB”写为“ 1KB”,因为与“ 1024”相比,解析“ 1KB”比“ 1024”更容易和快捷(并且数字越大,变得越容易)。 但是,对于计算机而言,诸如9KB之类的字符串大于1MB(即使9KB只是兆字节的一部分)。 GNU sort命令提供了“--human-numeric-sort(-h)”选项,以帮助正确解析这些值。

有一些矛盾之处。 例如,16,000字节大于1KB,但是排序无法识别:

从逻辑上讲,在这种情况下应将16,000写为16KB,因此不应该完全责怪GNU sort。 只要确定自己的数字是一致的,“--human-numeric-sort”可以以计算机友好的方式帮助解析人类可读的数字。

随机排序(仅GNU)

有时,实用程序提供了执行相反操作的选项。 从某种意义上说,排序命令的随机“排序”文件能力是没有意义的。 再者,命令的工作流程使其成为一种方便的功能。 你可以使用其他命令(例如shuf),也可以在正在使用的命令中添加一个选项。 无论是过时的设计还是巧妙的UX设计,GNU sort命令都提供了对文件进行任意排序的方法。

任意排序的最纯粹形式是“--random-sort”或“-R”选项(不要与“-r”选项混淆,后者是“--reverse”的缩写)。

你可以对文件多次运行随机排序,以便每次获得不同的结果。

Sorted

sort GNU和BSD排序命令还有许多其他功能,因此可以花一些时间来了解这些选项。 你会惊讶于排序的灵活性,特别是当它与其他Unix实用程序结合使用时。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 按字母顺序对行排序
  • 按列排序
  • 反向排序
  • 按月排序(仅GNU)
  • 可读数字排序(仅GNU)
  • 随机排序(仅GNU)
  • Sorted
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档