专栏首页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 条评论
登录 后参与评论

相关文章

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

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

    QRosie
  • Linux中的几个命令--top、free、uniq

    Linux top命令用于实时显示 process 的动态,当我们在命令框中敲入top命令然后回车之后,可以看到如下输出:

    AsiaYe
  • 3个命令行游戏--乐学乐玩Bash【Linux-Command line】

    学习是艰苦的工作,没有人喜欢工作。这意味着无论学习Bash多么容易,它对你来说仍然像件差事。当然,除非你通过游戏学习。

    QRosie
  • linux split join paste uniq tee sort 工作中文本操作常用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details...

    bear_fish
  • Top 命令详解

    TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。

    明哥的运维笔记
  • Linux 学习笔记之超详细基础linux命令 Part 2

    ---------------------------------接Part 1------------------------------

    授客
  • Linux文本操作命令

    paste命令用于合并文件的列,把文件内容列列合并。简单就是列追加,类似R中的cbind命令

    Y大宽
  • shell编程05【自定义函数和高级命令】

       linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。shell中函数的定义格式如下

    用户4919348
  • Linux命令(29)——ls命令

    ls命令用来显示目录内容,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。

    Dabelv

扫码关注云+社区

领取腾讯云代金券