linux中如何对文本进行高效排序

71次阅读
没有评论

共计 2394 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 linux 中如何对文本进行高效排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

按照字典顺序排序

假如有文本内容 test1.txt 如下(偷偷问一句:你在使用哪个 linux 发行版?):

Debian
Gentoo
GentooCentOSFedora
ubuntu
redhat
OpenSuse

现在要对文本内容按照字典升序排序,只需使用下面的命令即可:

sort test1.txt

输出结果如下:

Arch
CentOS
Debian
Fedora
Gentoo
Gentoo
OpenSuse
redhat
ubuntu

可以看到输出结果按照字典顺序的升序进行了排序。如果需要降序输出只需要使用 - r 参数,如:

sort -r test1.txt

输出结果如下:

ubuntu
redhat
OpenSuse
Gentoo
Gentoo
Fedora
Debian
CentOS
Arch

去除重复行

我们看到前面有两行的内容是重复的,即 Gentoo 行,使用 - u 参数可以去掉重复的行:
sort -u test1.txt
输出结果如下:

Arch
CentOS
Debian
Fedora
Gentoo
OpenSuse
redhat
ubuntu

在输出结果中,重复的 Gentoo 行被去掉了。

按照数字排序

假设有文本内容 test2.txt 如下,第一列为市值排名,第二列为公司名称,第三列为公司创建时间:

2 google 1998
10 icbc 1984
5 tencent 1998
1 apple 1976
16 samsung 1938

按照前面的介绍,我们对内容排序结果如下:

10 icbc 1984
16 samsung 1938
1 apple 1976
2 google 1998
5 tencent 1998

这不对啊,16 怎么在 1 前面呢?很显然这是因为前面的排序都是字典排序,而我们实际需要的是按照数值大小进行排序,因此需要用到 - n 参数:
sort -n test2.txt
最后的输出结果如下:

1 apple 1976
2 google 1998
5 tencent 1998
10 icbc 1984
16 samsung 1938

可以看到,最终结果按照市值排名打印出来。

按照指定列排序

假如我们不想按照市值排名排序,而是按照公司名称排序呢?那么就需要按照指定列排序了。这里需要用到两个参数:
-t 指定分隔符,未指定时,默认分隔符为空白
-k 指定列排序
需要按照第二列,公司名称排序,因此排序命令如下:
sort -k 2 test2.txt #默认以空白作为分隔符
sort -k 2 -t sort2.txt #以空格为分隔符
结果如下:

1 apple 1976
2 google 1998
10 icbc 1984
16 samsung 1938
5 tencent 1998

可以看到,最后会以第二列,即公司名称为依据排序输出。

以多列为依据排序

假设我们按照公司创建年份排序,如果年份相同,则按照公司名称排序,即分别以第三列,第二列为依据排序:

sort -n -k 3 -k 2 test2.txt

输出结果如下:

16 samsung 1938
1 apple 1976
10 icbc 1984
2 google 1998
5 tencent 1998

如果要按照年份降序排序,则只需加 - r 参数即可:

sort -n -k 3r -k 2 test2.txt

输出结果如下:

2 google 1998
5 tencent 1998
10 icbc 1984
1 apple 1976
16 samsung 1938

按照特定列的特定字符排序

假如我们想要按照公司名称的第二至第三个字符排序,可以使用下面的方式:

sort -t     -k 2.2,2.3 test2.txt

输出结果如下:

16 samsung 1938
10 icbc 1984
5 tencent 1998
2 google 1998
1 apple 1976

-k 2.2,2.3 指定了按照第二列排序,并且是第二列的第二个字符开始,到第三个字符结束。可以看到,由于 samsung 的第二个字母是 a 而排在开头。如果是以第二个字符开始,到最后一个字符结束,则用下面的命令即可:

sort -t     -k 2.2 test2.txt

保存排序结果

前面的排序命令仅仅是将排序结果打印到控制台,并没有修改源文件,如果想要将排序结果保存在文件中,需要使用 - o 参数:

sort test1.txt -o test1.txt # 直接修改源文件
sort test1.txt -o output.txt # 输出到另外一个文件
sort test1.txt   output.txt # 重定向到 output.txt 中

如果想将排序结果保存在源文件中,只能使用 - o 参数,而如果是其他文件,既可以使用 - o 参数,也可以使用重定向。

检查是否乱序

sort 同样也可以用来检查文本内容是否已经是排好序的。
例如:

sort -c test1.txt # 打印结果,并告知无序开始的行数
sort -C test1.txt # 不打印结果,但是命令的返回结果为 1 

合并已排序的文本

可以使用 - m 选项来合并已经排好序的文本,但不会重新排序。
例如:

sort -m file1 file2

总结
以上就是使用 sort 命令对文本进行排序的常见使用方法,更多内容可使用 man 命令进行查看。常见选项如下:

-r  按照降序排列
-n  按照数值大小排列
-k  按照指定列排列
-t  指定分隔符
-u  去重
-o  输出结果到文件中

以上是“linux 中如何对文本进行高效排序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-07发表,共计2394字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)