如何在 Linux 中使用 sort 命令对文本文件进行排序
如果你想在Linux中快速对文本文件的内容进行排序,只需使用sort命令即可。
Linux 提供了多种可用于处理文本文件的实用程序。无论您是要删除重复数据还是对文件内的内容进行排序,Linux 命令行工具都能满足您的需求。
本文将演示排序命令以及如何使用它对文本文件中的内容进行排序并进行相应的排列。
什么是排序命令?
如上所述,排序命令帮助用户按特定顺序排列文本文件的内容。有多个选项可供您根据自己的意愿对文件进行排序。它是一个标准的 Linux 程序,可以按字母顺序、数字顺序、列顺序等对文本文件进行正序或逆序排序。
该命令的其他功能包括排序时忽略字符大小写、按月份对文件进行排序、忽略文件中的空白以及随机排序。使用排序,您还可以检查文件是否已经排序。
如何在 Linux 中使用排序
尽管 sort 包含多种可以使用的方法和标志,但它仍然很容易学习。
基本语法
使用排序的基本语法是:
sort filename
...其中文件名是要排序的文本文件的绝对或相对路径。
默认情况下,排序将根据以下条件排列内容:
以数字字符开头的行具有最高优先级。
对以数字开头的行进行排序后,该命令将按字母顺序对行进行排序。
以小写字符开头的行位于以相同大写字符开头的行之前。
考虑一个名为 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
输出 :
请注意,排序将合并文件的输出并将它们一起显示在终端中。
对文件进行反向排序
如果要反转内容的排列,请在默认命令中使用 -r 标志。下面命令中的-r代表反向。
sort -r textfile.txt
输出 :
对文件进行数字排序
要对包含数字数据的文件进行排序,请在命令中使用 -n 标志。默认情况下,排序将按升序排列数据。
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 标志时,排序仅显示不同的行并根据指定的条件排列它们。
在 Linux 中处理文本文件
尽管命令行文本编辑器的功能是无与伦比的,但您仍然可以选择图形编辑器(例如 gedit)来轻松修改文本文件的内容。而且,对于那些刚接触 Linux 且无法处理终端的人来说,这是一个更好的选择。
开始使用命令行(尤其是 Linux)的最佳方法是首先练习基本命令。在涵盖基本实用程序之后,逐步推进更复杂的命令可能是最好的方法。