在 Linux 中使用 Sort 命令对文件进行排序
排序命令有助于对文本文件中的行进行排序/排序。您可以对文本文件中的数据进行排序并在屏幕上显示输出,或将其重定向到文件。根据您的要求,sort 提供了几个用于对文本文件中的数据进行排序的命令行选项。
排序命令语法:
$ sort [-options]
例如,这是一个测试文件:
$ cat test
zzz
sss
qqq
aaa
BBB
ddd
AAA
而且,这是在没有任何选项的情况下对该文件执行排序命令时得到的结果。它对测试文件中的行进行排序并显示排序后的输出。
$ sort test
aaa
AAA
BBB
ddd
qqq
sss
zzz
1. 使用 -n 选项执行数字排序
如果我们想对数值进行排序,那么我们可以使用-n或–numeric-sort选项。
为此示例创建以下测试文件:
$ cat test
22 zzz
33 sss
11 qqq
77 aaa
55 BBB
以下排序命令根据行首字的数值对测试文件中的行进行排序,并显示排序后的输出。
$ sort -n test
11 qqq
22 zzz
33 sss
55 BBB
77 aaa
2. 使用 -h 选项对人类可读数字进行排序
如果我们想对人类可读的数字进行排序(例如,2K 1M 1G),那么我们可以使用-h或--human-numeric-sort选项。
为此示例创建以下测试文件:
$ cat test
2K
2G
1K
6T
1T
1G
2M
以下排序命令对测试文件中的人类可读数字(即 1K = 1 千、1M = 100 万、1G = 1 Giga、1T = 1 Tera)进行排序并显示排序后的输出。
$ sort -h test
1K
2K
2M
1G
2G
1T
6T
3. 使用 -M 选项对一年中的月份进行排序
如果我们想按一年中的月份顺序排序,那么我们可以使用-M或–month-sort选项。
为此示例创建以下测试文件:
$ cat test
sept
aug
jan
oct
apr
feb
mar11
以下排序命令按月顺序对测试文件中的行进行排序。请注意,文件中的行应在行首包含至少 3 个字符的月份名称(例如 jan、feb、mar)。如果我们给出一月的 ja 或八月的 au,那么 sort 命令不会将其视为月份名称。
$ sort -M test
jan
feb
mar11
apr
aug
sept
oct
4. 使用 -c 选项检查内容是否已经排序
如果我们想检查文本文件中的数据是否排序,那么我们可以使用-c或–check, –check=diagnose-first选项。
为此示例创建以下测试文件:
$ cat test
2
5
1
6
以下排序命令检查文本文件数据是否排序。如果不是,则显示第一次出现的行号和无序值。
$ sort -c test
sort: test:3: disorder: 1
5. 使用 -r 和 -u 选项反转输出并检查唯一性
如果我们想以相反的顺序获得排序的输出,那么我们可以使用-r或–reverse选项。如果文件包含重复的行,那么要在排序的输出中获得唯一的行,可以使用“-u”选项。
为此示例创建以下测试文件:
$ cat test
5
2
2
1
4
4
以下排序命令以相反的顺序对测试文件中的行进行排序并显示排序后的输出。
$ sort -r test
5
4
4
2
2
1
以下排序命令以相反的顺序对测试文件中的行进行排序,并从排序的输出中删除重复的行。
$ sort -r -u test
5
4
2
1
6. 选择性地对内容进行排序,自定义分隔符,使用 -k、-t、-o 选项将输出写入文件
如果我们想对文本文件中的列或单词位置进行排序,则可以使用“-k”选项。如果我们文件的每一行中的每个单词都用分隔符分隔,除了“空格”,那么我们可以使用“-t”选项指定分隔符。我们可以在任何指定的输出文件(使用“-o”选项)中获得排序的输出,而不是在标准输出上显示输出。
为此示例创建以下测试文件:
$ cat test
aa aa zz
aa aa ff
aa aa tt
aa aa kk
以下排序命令对测试文件中每行第三个单词的行进行排序,并显示排序后的输出。
$ sort -k3 test
aa aa ff
aa aa kk
aa aa tt
aa aa zz
$ cat test
aa|5a|zz
aa|2a|ff
aa|1a|tt
aa|3a|kk
在这里,一起使用了几个选项。在测试文件中,每行中的单词由分隔符“|”分隔。它根据数值对测试文件中每行的第 2 个字的行进行排序,并将排序后的输出存储到指定的输出文件中。
$ sort -n -t'|' -k2 test -o outfile
输出文件的内容如下所示。
$ cat outfile
aa|1a|tt
aa|2a|ff
aa|3a|kk
aa|5a|zz
- 点赞
- 收藏
- 关注作者
评论(0)