Linux中“sort”命令的14个实用示例 – 第1部分

“sort”命令是一个用于打印输入文本文件行并按排序顺序连接所有文件的Linux程序。Sort命令以空白字符作为字段分隔符,并将整个输入文件视为排序键。需要注意的是,sort命令实际上并不对文件进行排序,而只是打印排序输出,直到您将输出重定向。

本文旨在深入了解Linux的“sort”命令,提供14个有用的实际示例,向您展示如何在Linux中使用sort命令。

1. 创建具有指定内容的文本文件

首先,我们将创建一个名为“tecmint.txt”的文本文件,该文件将用于在我们的工作目录中执行“sort”命令示例,该工作目录位于“/home/$USER/Desktop/tecmint”中。

以下命令中的选项“-e”启用反斜杠的解释,“/n”告诉echo命令将每个字符串写入新行。

echo -e "computer\nmouse\nLAPTOP\ndata\nRedHat\nlaptop\ndebian\nlaptop" > tecmint.txt

2. 查看文件内容

在我们开始使用“sort”命令之前,让我们使用以下cat命令查看文件的内容及其外观。3. 排序文件内容

cat tecmint.txt

3. 排序文件内容

使用命令“sort tecmint.txt”来重新排列文件中的行,使其按字母顺序升序排列。如果有任何重复的行,它将保留每个唯一行的单个副本。

sort tecmint.txt

Note: The above command doesn’t sort the contents of the text file but only displays the sorted output on the terminal.

4. 将排序后的输出重定向到新文件

以下命令用于将文本文件“tecmint.txt”的行按字母顺序排序,然后将排序后的输出重定向到一个名为“sorted.txt”的新文件中。这意味着原始文件保持不变,排序后的内容存储在单独的文件中。

要验证内容,请使用cat命令

sort tecmint.txt > sorted.txt
cat sorted.txt

5. 按反序排序文件内容

以下命令用于将文本文件“tecmint.txt”的行按反序排序,这意味着它将按字母顺序降序排列行,然后将排序后的输出重定向到一个名为“reversesorted.txt”的新文件中。

sort -r tecmint.txt > reversesorted.txt
cat reversesorted.txt

6. 保存文件和目录列表

以下命令用于详细列出用户主目录(“/home/$USER”)的内容,使用ls命令以长格式显示,然后将此目录列表重定向到一个名为“lsl.txt”的文本文件,该文件位于用户的桌面上,具体在“tecmint”目录中。

ls -l /home/$USER > /home/$USER/Desktop/tecmint/lsl.txt
cat lsl.txt

现在,我们将探讨基于除默认初始字符之外的字段对内容进行排序的示例。

7. 根据第二字段排序文件内容

以下命令用于根据文件“lsl.txt”中每行第二个字段的值对内容进行排序。'-n'选项表示数值排序,将第二个字段视为数字而不是文本。

'-k2'选项指定我们希望基于第二个字段进行排序。执行此命令后,您将获得“lsl.txt”中行的排序列表,排序标准是每行第二个字段中的数值。

sort -nk2 lsl.txt

8. 根据第九字段排序文件内容

以下命令用于根据每行第九个字段的值对文件“lsl.txt”中的行进行升序排序。'-k9'选项指定应基于第九个字段进行排序。

sort -k9 lsl.txt

9. 按文件大小排序文件

以下命令将’ls‘和’sort‘命令结合起来,以长列表格式列出用户主目录的内容,然后将目录列表通过管道传输到'sort -nk5',该命令根据第五列的值,即文件大小,对列表进行排序。

ls -l /home/$USER | sort -nk5

10. 删除文件中的重复行

以下命令对文件“tecmint.txt”中的行按字母顺序升序排序,并使用'-u'选项删除任何重复行,该选项代表“唯一”,并确保在排序输出中保留唯一行。

$ cat tecmint.txt
$ sort -u tecmint.txt

到目前为止的规则(我们所观察到的):

  • 以数字开头的行在列表中优先,并位于顶部,除非另有指定(-r)。
  • 以小写字母开头的行在列表中优先,并位于顶部,除非另有指定(-r)。
  • 内容根据字母在字典中的出现顺序列出,除非另有指定(-r)。
  • 默认情况下,sort命令将每行视为一个字符串,然后根据字母在字典中的出现顺序对其进行排序(数字优先;参见规则-1),除非另有指定。

11. 将目录列表重定向到文件

以下命令以长格式列出用户的家目录内容,包括隐藏的文件和目录,然后将目录列表重定向到用户桌面上的“lsla.txt”文本文件中,该文件位于“tecmint”目录下。

ls -lA /home/$USER > /home/$USER/Desktop/tecmint/lsla.txt
cat lsla.txt

熟悉ls命令的人知道,'ls -lA'相当于'ls -l'加上隐藏文件。因此,这两个命令的大部分内容将是相同的。

12. 排序文件内容

以下命令对两个文本文件“lsl.txt”和“lsla.txt”的内容进行按字母顺序升序排序,然后将排序后的内容合并并在终端中显示。

$ sort lsl.txt lsla.txt

注意文件和文件夹的重复。

13. 删除文件中的重复行

以下命令合并并按字母顺序升序排序两个文本文件“lsl.txt”和“lsla.txt”的内容,同时使用'-u'选项删除任何重复行,确保在排序输出中保留唯一行。

$ sort -u lsl.txt lsla.txt

注意输出中已省略重复项。此外,您可以通过重定向将输出保存到新文件中。

14. 使用自定义分隔符按多个字段排序输出

以下命令结合了‘ls‘和‘sort‘命令,以长格式列出用户主目录的内容,然后将目录列表通过管道传输到‘sort‘命令,该命令根据特定列和字段对输出进行排序。

ls -l /home/$USER | sort -t "," -nk2,5 -k9

这里是命令的分解:

  • -t "," – 指定逗号(",")用作字段分隔符。
  • -nk2,5 – 表示按第2到第5列的数值进行排序,这些列通常代表权限和所有权细节。
  • -k9 – 进一步根据第9列(表示文件大小)对结果进行排序。

目前就到这里。在下一篇文章中,我们将深入探讨更多关于sort命令的详细示例

请继续分享、评论、点赞,并帮助我们触及更广泛的受众。

Source:
https://www.tecmint.com/sort-command-linux/