专栏首页Opensource翻译专栏在命令行进行sort排序【Linux-Command line】

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

使用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实用程序结合使用时。

原文链接:https://opensource.com/article/19/10/get-sorted-sort

原文作者:Seth Kenlon(Red Hat)

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hexdump如何工作【Linux-Command line】

    Hexdump是一种实用程序,可以以十六进制,十进制,八进制或ASCII显示二进制文件的内容。 它是一种检查工具,可用于数据恢复,逆向工程和编程。

    QRosie
  • Linux chgrp和newgrp命令简介【Linux-Command line】

    在近期的文章中,我介绍了chown命令,该命令用于修改系统上文件的所有权。 回想一下,所有权是分配给对象的用户和组的组合。 chgrp和newgrp命令为管理需...

    QRosie
  • 3个用于从命令行进行演示的工具【Linux-Command line】

    mdp,tpp和send可能不会为你赢得任何设计大奖,但是它们会为你提供可以从终端运行的基本幻灯片。

    QRosie
  • 【数据库】MySQL进阶七、limit用法& varchar类型排序

    【数据库】MySQL进阶七、 limit用法与varchar排序 limit用法 limit是mysql的语法 select * from table limi...

    奋斗蒙
  • The Myth of volatileJDK1.5之前的volatileJDK1.5之后的volatilevolatile足够了吗?volatile VS 锁结论

    大宽宽
  • 一个命令帮你对文本排序

    在Linux下,有时候需要对文本内容进行排序,例如按照字典顺序排序,按照数字排序或者按照特定列排序等等。今天我们就借助一个命令-sort来满足我们对文本排序的需...

    编程珠玑
  • 5分钟面试指南(第三篇 编码让我头大)

    本部分我们会为大家提供一些python初级工程师在面试过程中遇到的常见的面试题目,期望达到的效果:

    还是牛6504957
  • 买完团购服务器不会登陆有没有大神教教我

    买完团购服务器不会登陆有没有大神教教我 之前从来没有接触过这个东西 在朋友告诉的前提下买了这个团购的服务器 可是现在根本不会用有没有哪位大神教教怎我怎么用...

    用户2433155
  • 解决Crayon Syntax Highlighter代码高亮与fancybox图片暗箱冲突问题

    其实,这是一个历史遗留问题,在最开始建站的时候就已经出现了,在知更鸟主题和 Crayon Syntax Highlighter 这个插件之间,我最终选择了前者。...

    张戈
  • 上架提审词不带关键词的马甲包也能获得高流量收益方案

    开发者发布商(用于显示上架开发商的名字,原先大家都是按照自己开发者的名字的,我在7月2号上架成功后客户说包不是很好,因为提审词不怎么样,所以一直感觉有点对不起客...

    jiang chen

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动