Linux中的排序命令
sort 命令以有用的方式排列文本行。 这个简单的工具可以帮助您从命令行快速排序信息。
句法
sort [options] <filename>
你应该注意几点:
- 当您使用不带任何选项的排序时,将强制执行默认规则。 它有助于理解默认规则以避免意外结果。
- 使用排序时,您的原始数据是安全的。 输入的结果仅显示在命令行上。 但是,如果您愿意,可以将输出指定到单独的文件。 稍后再谈。
- 排序最初是为使用 ASCII 字符而设计的。 我没有对此进行测试,但不同的编码可能会产生意想不到的结果。
sort 命令中的默认规则
这些是使用排序时的默认规则。 前几个示例将阐明如何管理这些优先级。 然后我们将研究专门的选项。
- 数字 > 字母
- 小写>大写
排序命令示例
让我向您展示一些可以在各种情况下使用的排序命令示例。
1.按字母顺序排序
默认排序命令可以轻松地按字母顺序查看信息。 不需要任何选项,即使输入大小写混合,AZ 排序也能按预期工作。
我将使用一个名为 filename.txt 的示例文本文件,如果您查看文件的内容,您将看到以下内容:
MX Linux
Manjaro
Mint
elementary
Ubuntu
现在,如果您对其使用排序命令:
sort filename.txt
这是按字母顺序排序的输出:
elementary
Manjaro
Mint
MX Linux
Ubuntu
2.按数值排序 [option -n]
让我们使用与之前相同的列表 example 并按数字顺序排序。 如果您想知道,该列表反映了最流行的 Linux 发行版(2019 年 7 月),根据 distrowatch.com.
我将修改文件的内容,以便对项目进行编号,但顺序如下所示。
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
看起来不错,对吧? 但是,您可以依靠这种方法准确地排列数据吗? 可能不是。 让我们看看另一个 example 找出原因。
这是我的新示例文本:
1
5
10
3
5
2
60
23
432
21
现在,如果我在没有任何选项的情况下使用 sort 命令,这就是我得到的:
[email protected]:~$ 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.逆序排序 [option -r]
对于这个,我将再次使用我们的发行版列表。 反向功能是不言自明的。 它将反转文件中任何内容的顺序。
sort filename.txt -r
在这里,您可以按相反的顺序输出文本:
5. Ubuntu
4. elementary
3. Mint
2. Manjaro
1. MX Linux
4. 随机排序 [option -R]
如果你在尝试反向功能时不小心弄坏了你的 shift 键,你可能会得到一些奇怪的结果。 -R
以随机顺序重新排列输出。
sort filename.txt -R
这是随机排序的输出:
4. elementary
1. MX Linux
2. Manjaro
5. Ubuntu
3. Mint
5. 按月份排序 [option -M]
Sort 还具有按月排列的内置功能。 它根据特定于语言环境的信息识别多种格式。 我试图演示一些 unqiue 测试以表明它将按日期排列,而不是按年份排列。 月份缩写显示在全名之前。
这是此示例文本文件 example:
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. Save 排序结果到另一个文件
正如我之前提到的,sort 默认情况下不会更改原始文件。 如果需要保存排序后的内容,可以做到。
为了这 example,我创建了一个新文件,我希望在其中打印排序信息并使用名称 filename_sorted.txt 保存。
警告: 如果您尝试将已排序的数据定向到同一文件,它将删除文件的内容。
sort filename.txt -n > filename_sorted.txt
如果你在输出文件上使用 cat 命令,这将是它的内容:
1. MX Linux
2. Manjaro
3. Mint
4. elementary
5. Ubuntu
7. 对特定列进行排序 [option -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. 排序和删除重复项 [option -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. 排序时忽略大小写 [option -f]
许多运行排序的现代发行版默认会实现忽略大小写。 如果您没有,请添加 -f
选项将产生预期的结果。
sort filename.txt -f
这是 sort 命令忽略大小写的输出:
alpha
alPHa
Alpha
ALpha
beta
Beta
BEta
BETA
10.按人类数值排序 [option -h]
此选项允许比较字母数字值,例如 1k(即 1000)。
sort filename.txt -h
这是排序后的输出:
10.0
100
1000.0
1k
我希望本教程能帮助您了解 Linux 中 sort 命令的基本用法。 排序命令通常与 Linux 中的 uniq 命令结合使用,用于对文本文件进行唯一排序。
如果您有一些很酷的排序技巧,为什么不在评论部分与我们分享呢?