如何在 Linux 中使用 sort 命令对文本文件进行排序

Linux 为您提供了几个可用于处理文本文件的实用程序。无论您是想删除重复数据还是对文件中的内容进行排序,Linux 命令行工具都能满足您的需求。

本文将演示 sort 命令以及如何使用它对文本文件中的内容进行排序并进行相应的排列。

什么是排序命令?

如上所述,排序命令帮助用户以特定顺序排列文本文件的内容。有多个选项可供您根据需要对文件进行排序。它是一个标准的 Linux 程序,可以按字母、数字、按列等方式对文本文件进行正常或反向排序。

该命令的其他功能包括在排序时忽略字符大小写、按月排序文件、忽略文件中的空格和随机排序。使用排序,您还可以检查文件是否已经排序。

如何在 Linux 中使用排序

尽管 sort 包含一些您可以使用的方法和标志,但它仍然很容易学习。

基本语法

使用 sort 的基本语法是:

 sort filename

…其中filename是要排序的文本文件的绝对或相对路径。

默认情况下,sort 将按照以下标准排列内容:

  1. 以数字字符开头的行具有最高优先级。
  2. 在对以数字开头的行进行排序后,该命令将按字母顺序对行进行排序。
  3. 以小写字符开头的行在以大写相同字符开头的行之前。

考虑一个名为textfile.txt的文本文件,其中包含以下信息:

要使用默认配置对文件进行排序:

 sort textfile.txt

输出:

创建新的输出文件

sort 命令不会修改文件的内容。它只是将排序后的内容发送到标准输出。但是,这并不意味着 sort 不能创建新文件。您可以使用-o标志来指定排序文件的名称,sort 将自动为您创建文件并添加内容。

 sort -o sortedfile filename

…其中sortedfile是输出文件的名称, filename是需要排序的原始文件。

textfile.txt 进行排序并为内容创建一个新的输出文件:

 sort -o sorted.txt textfile.txt

输出:

对多个文件进行排序

要一次对多个文件进行排序,只需传递以空格字符分隔的文件名。

 sort textfile.txt textfile2.txt

输出:

请注意, sort 将合并文件的输出并将它们一起显示在终端中。

对文件进行反向排序

如果要反转内容的排列,请在默认命令中使用-r标志。以下命令中的-r代表Reverse

 sort -r textfile.txt

输出:

对文件进行数字排序

要对包含数字数据的文件进行排序,请在命令中使用-n标志。默认情况下,sort 将按升序排列数据。

 sort -n numbers.txt

输出:

如果要按降序排序,请在命令中使用-r选项和-n标志反转排列。

 sort -rn numbers.txt

输出:

排序时忽略字符大小写

默认情况下,排序会考虑内容的字符大小写。以小写字符开头的行在以相同字符的大写版本开头的行之前。例如,“他是男孩”将在“他是男孩”之前。

如果要排序忽略字符大小写,请指定-f–ignore-case标志,如下所示:

 sort -f textfile.txt
sort --ignore-case textfile.txt

输出:

根据月份对文件进行排序

使用-M标志,您可以根据月份名称修改文件内容的顺序。

 sort -M textfile2.txt

输出:

忽略前导空格

有时,您要排序的文件可能包含空格或制表符。要忽略此类空白字符,请使用-b标志。

 sort -b fileblanks.txt

输出:

根据列对文件进行排序

如果您有一个文本文件,其中数据排列在不同的列中,您可以根据列的内容对文件进行排序。您需要做的就是将列号与-k标志一起传递。

考虑一个包含不同列的文件信息的文本文件。根据第八列对名为output.txt的文件进行排序:

 sort -k8 -rn output.txt

输出:

管道排序与其他命令

您甚至可以将 sort 与其他 Linux 命令一起使用来修改输出的排列。例如,要根据文件的大小对ls 命令的输出进行排序:

 ls -la | sort -k5 -rn

输出:

随机排序文件

如果要随机化文本文件中的行顺序,可以使用-R标志。考虑文件textfile.txt

 sort -R textfile.txt

输出:

对文件中的版本号进行排序

如果您有一个包含与包关联的版本信息的文本文件,您可以使用-V–version-sort标志对其内容进行排序

 sort -V version.txt
sort --version-sort version.txt

输出:

检查文件是否已排序

-c标志将帮助您识别已根据指定选项排序的文件。如果文件内容排序正确, sort 将不会显示任何输出。

要检查文件textfile.txt是否已排序:

 sort -c textfile.txt

现在,让我们对文件进行排序并将其输出保存到名为sorted.txt的新文件中。在发出以下命令时:

 sort -c sorted.txt

输出:

您还可以指定各种标志以根据特定条件检查文件的排列。例如,检查文件numbers.txt是否按降序排序:

 sort -c -rn numbers.txt

您将看到一个输出,指出文件未正确排序。让我们对文件进行排序并检查新文件是否通过测试。

 sort -o sorted.txt -rn numbers.txt
sort -c -rn sorted.txt

输出:

对文件进行排序并删除重复项

您正在使用的文件可能包含重复数据。尽管您可以使用uniq 命令从文件中删除此类信息,但 sort 可以为您执行此任务。 -u–unique标志是您所需要的。

考虑一个名为duplicate.txt的文件:

要对文件进行排序并删除重复的数据:

 sort -u duplicate.txt

输出:

您可以看到,当您使用-u标志时,sort 仅显示不同的行并根据指定的条件排列它们。

在 Linux 中处理文本文件

尽管命令行文本编辑器的功能无与伦比,但您仍然可以选择图形编辑器(例如 gedit)来轻松修改文本文件的内容。此外,对于刚接触 Linux 并且无法处理终端的人来说,这是一个更好的选择。

从命令行开始的最好方法,以及一般的 Linux,是首先练习基本命令。在涵盖了基本的实用程序之后,逐渐转向更复杂的命令可能是最好的方法。