Linux 中的排序命令 [10 个有用示例]
Linux中的Sort命令用于对文本文件的内容进行排序。本教程向您展示排序命令的一些基本示例。
Linux 中的排序命令
sort 命令以有用的方式排列文本行。这个简单的工具可以帮助您快速对命令行中的信息进行排序。
语法
sort [options] <filename>
您应该注意以下几点:
当您使用不带任何选项的排序时,将强制执行默认规则。它有助于了解默认规则以避免意外结果。
使用排序时,您的原始数据是安全的。输入的结果仅显示在命令行上。但是,如果您愿意,可以将输出指定到单独的文件。稍后会详细介绍。
Sort 最初设计用于 ASCII 字符。我没有对此进行测试,但不同的编码可能会产生意外的结果。
排序命令中的默认规则
这些是使用排序时的默认规则。前几个示例将阐明如何管理这些优先级。然后我们将看看专门的选项。
数字 > 字母
小写 > 大写
排序命令示例
让我向您展示一些可以在各种情况下使用的排序命令的示例。
1.按字母顺序排序
默认排序命令可以轻松按字母顺序查看信息。不需要任何选项,即使是混合大小写的条目,A-Z 排序也能按预期工作。
我将使用一个名为 filename.txt 的示例文本文件,如果您查看该文件的内容,您将看到以下内容:
MX Linux
Manjaro
Mint
elementary
Ubuntu
现在,如果您对其使用排序命令:
sort filename.txt
这是按字母顺序排序的输出:
elementary
Manjaro
Mint
MX Linux
Ubuntu
2. 按数值排序[选项-n]
让我们采用前面示例中使用的相同列表,并按数字顺序排序。如果您想知道,该列表反映了 distrowatch.com 上最流行的 Linux 发行版(2019 年 7 月)。
我将修改文件的内容,以便对项目进行编号,但顺序不正确,如下所示。
1. MX Linux
4. elementary
2. Manjaro
5. Ubuntu
3. Mint
sort filename.txt
排序后,结果为:
1. MX Linux
2. Manjaro
3. Mint
4. elementary
5. Ubuntu
看起来不错,对吧?但是,您可以依靠这种方法来准确地排列您的数据吗? 可能不会。让我们看另一个例子来找出原因。
这是我的新示例文本:
1
5
10
3
5
2
60
23
432
21
现在,如果我使用不带任何选项的排序命令,我会得到以下结果:
chris@discodingo:~$ sort order.txt
1
10
2
21
23
3
432
5
5
60
注意:数字仅按其前导字符排序。
添加 -n
选项后,现在将计算字符串的数值,而不仅仅是第一个字符。现在,您可以在下面看到我们的列表已正确排序。
sort order.txt -n
现在您将获得正确排序的输出:
1
2
3
5
5
10
21
23
60
432
3.逆序排序[选项-r]
对于这个,我将再次使用我们的发行版列表。反向函数是不言自明的。它将颠倒文件中任何内容的顺序。
sort filename.txt -r
这里有相反顺序的输出文本:
5. Ubuntu
4. elementary
3. Mint
2. Manjaro
1. MX Linux
4. 随机排序[选项-R]
如果您在尝试反向功能时不小心按下了 Shift 键,您可能会得到一些奇怪的结果。 -R
按随机顺序重新排列输出。
sort filename.txt -R
这是随机排序的输出:
4. elementary
1. MX Linux
2. Manjaro
5. Ubuntu
3. Mint
5. 按月份排序[选项-M]
排序还具有按月排列的内置功能。它根据特定于区域设置的信息识别多种格式。我试图演示一些独特的测试,以表明它将按日期排列,而不是按年份排列。月份缩写显示在全名之前。
以下是本例中的示例文本文件:
March
Feb
February
April
August
July
June
November
October
December
May
September
1
4
3
6
01/05/19
01/10/19
02/06/18
让我们使用 -M 选项按月份排序:
sort filename.txt -M
这是您将看到的输出:
01/05/19
01/10/19
02/06/18
1
3
4
6
Jan
Feb
February
March
April
May
June
July
August
September
October
November
December
6. 将排序结果保存到另一个文件中
正如我之前提到的,排序默认情况下不会更改原始文件。如果需要保存排序后的内容也可以。
在本例中,我创建了一个新文件,我希望在其中打印排序后的信息,并以名称 filename_sorted.txt 保存。
注意:如果您尝试将排序后的数据定向到同一个文件,则会删除文件的内容。强>
sort filename.txt -n > filename_sorted.txt
如果对输出文件使用 cat 命令,则其内容如下:
1. MX Linux
2. Manjaro
3. Mint
4. elementary
5. Ubuntu
7. 对特定列进行排序[选项-k]
如果文件中有表格,则可以使用 -k
选项指定要对哪一列进行排序。我添加了一些任意数字作为第三列,并将显示按每列排序的输出。我提供了几个示例来展示可能的输出多样性。选项添加在列号后面。
1. MX Linux 100
2. Manjaro 400
3. Mint 300
4. elementary 500
5. Ubuntu 200
sort filename.txt -k 2
这将按字母顺序对第二列上的文本进行排序:
4. elementary 500
2. Manjaro 400
3. Mint 300
1. MX Linux 100
5. Ubuntu 200
sort filename.txt -k 3n
这将按第三列上的数字对文本进行排序。
1. MX Linux 100
5. Ubuntu 200
3. Mint 300
2. Manjaro 400
4. elementary 500
sort filename.txt -k 3nr
与上面的命令相同,只是排序顺序颠倒了。
4. elementary 500
2. Manjaro 400
3. Mint 300
5. Ubuntu 200
1. MX Linux 100
8.排序并删除重复项[选项-u]
如果您的文件可能存在重复项,那么 -u
选项将使您的工作变得更加轻松。请记住,排序不会更改您的原始数据文件。我选择创建一个仅包含重复项目的新文件。下面您将看到输入,然后是命令运行后每个文件的内容。
1. MX Linux
2. Manjaro
3. Mint
4. elementary
5. Ubuntu
1. MX Linux
2. Manjaro
3. Mint
4. elementary
5. Ubuntu
1. MX Linux
2. Manjaro
3. Mint
4. elementary
5. Ubuntu
sort filename.txt -u > filename_duplicates.txt
这是已排序且没有重复的输出文件。
1. MX Linux
2. Manjaro
3. Mint
4. elementary
5. Ubuntu
9. 排序时忽略大小写[选项-f]
许多运行排序的现代发行版将默认实现忽略大小写。如果您的没有,添加 -f
选项将产生预期的结果。
sort filename.txt -f
以下是排序命令忽略大小写的输出:
alpha
alPHa
Alpha
ALpha
beta
Beta
BEta
BETA
10.按人类数值排序[选项-h]
此选项允许比较字母数字值,例如 1k(即 1000)。
sort filename.txt -h
这是排序后的输出:
10.0
100
1000.0
1k
我希望本教程可以帮助您了解 Linux 中排序命令的基本用法。 Sort 命令通常与 Linux 中的 uniq 命令结合使用,以对文本文件进行唯一排序。
如果您有一些很酷的排序技巧,为什么不在评论部分与我们分享呢?