在 Bash 中按列排序

偶尔,我们都会遇到这样一种情况,我们有一个巨大的文本文件,想要对数据进行相应的排序。

尤其是在您收到表格形式的数据时。

当然,如果您可以访问 GUI,那么有多种工具可以毫不费力地为您进行排序,但是如何按列对数据进行排序呢? bash 直接地?

在本指南中,我将向您介绍如何按列对数据进行排序 bash.

如何按列排序 bash

在本指南中,我将使用 sort 命令按列对数据进行排序。

要对列进行排序,您必须使用 -k 标志后跟要排序的列的编号。

因此,使用 sort 命令对列进行排序的语法如下所示:

sort -k [Column_number] Filename

但在进入排序示例之前,让我先分享一下 sort 命令如何默认对数据进行排序:

  • 按字母顺序对数据进行排序
  • 数字总是在字母之前
  • 小写字母优先于大写字母

总之,它看起来像这样: Numbers>Lowercase>Uppercase.

为了本教程,我将使用一个名为 Students.txt 其中包含7名学生的基本数据如下:

Name	Enrollment_No	City
Sagar	181240116054	Nadiad
Milan	181240116019	Aurangabad
Anurag	181240116018	Ahmedabad
Priya	181240116001	Ananad
Abhiman	181240116050	Varanasi
Aayush	181240115019	Karnataka
Ankush	181240116056	Bhubaneswar

假设我想对中的第二列进行排序 Student.txt 文件,所以我将使用以下内容:

sort -k 2 Students.txt

如您所见,第二列按升序排序(默认行为)。

但是,如果您想更改数据的排序方式怎么办?

按数字对列进行排序 bash

您可能想知道如果数字默认排序那么我为什么要写这个?

出色地, 问题是默认情况下排序命令只会对前导字符中的数字进行排序。

让我分享一个 example 这里。 在这里,我创建了一个在一列中包含随机数的示例文件,并使用了没有任何其他选项的排序命令:

正如您所看到的,结果一团糟!

要解决此问题,您需要使用 -n 使用现有命令标记:

sort -n -k [Column_number] Filename
对编号的列进行排序 bash

按列反向排序 bash

您可能会遇到希望按降序对列进行排序的情况。

为此,您必须使用 -r 旗帜:

sort -r -k [Column_number] Filename

在这里,我对第 3 列进行了反向排序:

sort -r -k 3 Students.txt
按列反向排序 bash

在这里你有它!

排序命令可以做更多……

与多个标志一起使用时的排序命令可以为您创造奇迹,尤其是当您有多个文件要处理时。

为此,我们有专门的指南介绍如何使用带有多个示例的 sort 命令:

我希望本指南已经解决了您之前的疑问。

如果您仍有疑问,请随时在评论中提问。