您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux: 史上最全的sort命令案例,打包带走吧

时间:2019-09-16 13:21:19  来源:  作者:

 

一、 介绍

sort命令是用来对文字内容(文档)排序使用的。同时也可以排序去重、指定字段排序,按照月份排序、按照数字排序,检查文件是否有序等等。默认情况是按照字典序排序以后标准输出到屏幕上,但是该命令不会修改原来的文档内容。sort命令通常和uniq命令以及wc命令一起使用。

二、 用法

 sort [OPTION]... [FILE]...

选项解释:

-b 忽略开头空格(空白),默认
-f 将所有小写字母转换为大写字母排序
-g 数字类型排序,效果同 -n
-n 字符串数字按照数字排序, 效果同-g
-h 以人类可以阅读(理解)的形式排序
-c 检查是否排序完成
-m 合并两个 文件排序
-r 降序(逆序)
-o 将排序以后的内容保存文件
-k 找到指定的列排序,下标从1开始
-u 排序以后去除重复行
-t 默认情况下的分隔符为空白符(空格、制表符等),使用-t可以自定义指定分隔符
-M 按照月份排序

三、 案例

3.0 默认排序

假如month.txt 文件内容如下:

[root@dongjing sort]# cat month.txt
Jun
Apr
Sep
Jul
Aug

默认排序(不加任何的选项)

[root@dongjing sort]# sort month.txt
Apr
Aug
Jul
Jun
Sep

默认按照字典序排列

3.1 按照月份排序

[root@dongjing sort]# sort -M month.txt
Apr
Jun
Jul
Aug
Sep

默认排序只是按照字典序排序,但是对于月份来说并不能符合我们的要求,所以我们使用 -M 按照月份排序

3.2 按照人类阅读排序

假如我们有一个size.txt文件内容如下,我们排序以后可以得到按照大小排序

[root@dongjing sort]# cat size.txt
2G
30K
9M
300B
30K
22M

排序

[root@dongjing sort]# sort -h size.txt
300B
30K
30K
9M
22M
2G

3.3 排序去重

通过3.2我们看到size.txt文件中30K这个有重复,我们能不能排序的时候就把重复行进行去重呢。可以通过 -u 选项来完成。

[root@dongjing sort]# sort -hu size.txt
300B
30K
9M
22M
2G

注意: 这里-h 一定要加的,保证按照数字排序。

3.4 倒序(翻转排序)

我们要将size.txt按照从大到小的顺序排序,怎么实现呢?可以使用-r 翻转原来排序的顺序,原先是从小到大,翻转以后就是从大到小了呢。

[root@dongjing sort]# sort -hr size.txt
2G
22M
9M
30K
30K
300B

3.5 保存排序以后的内容到文件中

将size.txt排序以后的结果保存的size_sorted.txt 文件中。

保存成文件我们可以使用 > 来完成,也可以使用-o 选项后面跟文件名来完成。

一、 使用> 完成保存

sort -h size.txt > size_sorted.txt

二、 使用-o 选项完成

[root@dongjing sort]# sort -h -o size_sorted.txt size.txt

注意: 运行完命令不会在屏幕上输出结果。而是直接保存到文件中了。

[root@dongjing sort]# ll | grep size
-rw-r--r-- 1 root root 23 Sep 16 10:34 size_sorted.txt
-rw-r--r-- 1 root root 23 Sep 16 10:23 size.txt

3.6 数字排序

假设我们有一个名为number的文件,内容如下:

[root@dongjing sort]# cat number.txt
22
11
111
09
80

通过3.1我们已经知道sort默认是按照字典序排序,那么这里先试用sort排序看一下结果:

[root@dongjing sort]# sort number.txt
09
11
111
22
80

没有达到我们预期的效果,我们想要的是按照数字大小进行排序。这里可以使用-n 或者 -g 都可以。

[root@dongjing sort]# sort -n number.txt
09
11
22
80
111
[root@dongjing sort]#
[root@dongjing sort]# sort -g number.txt
09
11
22
80
111

3.7 检查是否有序

判断是否有序可以使用-c 选项实现

[root@dongjing sort]# sort -c number.txt
sort: number.txt:2: disorder: 11 # 这里说明第一行的11不是有序的

先排序在检查以后,发现没有给出提示,表示已经有序。

[root@dongjing sort]# sort number.txt | sort -c
[root@dongjing sort]#

3.8 按照指定列(字段)排序

-k 按照指定的列排序,默认情况下每行按照空白符(空格、制表符等)来分隔列,列的下标从1开始

假如我们有一个score.txt的文件内容如下(每行字段之间使用空格分隔), 每隔字段分别代表: 名称 科目 成绩

[root@dongjing sort]# cat score.txt
Tom Scala 30
Tom Scala 30
Tom JAVA 30
aJack Python 95
bJack Python 95
Jack Spring 95
Mike Java 95
Linda linux 85
Linda php 66
Linda Linux 85
XY PHP 100
XY Java 55
Mike Scala 9
SS Shell 99

需求:现在我们需要按照成绩由高分到低分排序(结果中不能出现重复行) -- 本题目不关心科目。

[root@dongjing sort]# sort -u score.txt | sort -k3,3nr
XY PHP 100
SS Shell 99
aJack Python 95
bJack Python 95
Jack Spring 95
Mike Java 95
Linda Linux 85
Linda PHP 66
XY Java 55
Tom Java 30
Tom Scala 30
Mike Scala 9

注意: 我们如果只需要按照第三行排序建议写成 -k3,3,而不要写成 -k3 。因为-k3,3表示从第三列开始到第三列 结束,所以只包括第三列排序。 而-k3表示从第三列开始一直到最后一列排序。 当然在本案例中写-k3,3 和 -k3结果都是一样的。

3.9 指定分隔符排序

默认情况下的分隔符为空白符(空格、制表符等),使用-t 可以自定义指定分隔符。

假如我们有一个score.txt的文件内容如下(每行字段之间使用逗号分隔), 每隔字段分别代表: 名称 科目 成绩

[root@dongjing sort]# cat score.txt
Tom,Scala,30
Tom,Scala,30
Tom,Java,30
aJack,Python,95
bJack,Python,95
Jack,Spring,95
Mike,Java,95
Linda,Linux,85
Linda,PHP,66
Linda,Linux,85
XY,PHP,100
XY,Java,55
Mike,Scala,9
SS,Shell,99

需求:将每科成绩按照从高分到低分排序,如果分数、科目都相同的话,按照名字降序排列。(最后结果不能包含重复行)

[root@dongjing sort]# sort -u score.txt | sort -t "," -k2,2 -k3,3nr -k1,1r
Mike,Java,95
XY,Java,55
Tom,Java,30
Linda,Linux,85
XY,PHP,100
Linda,PHP,66
bJack,Python,95
aJack,Python,95
Tom,Scala,30
Mike,Scala,9
SS,Shell,99
Jack,Spring,95

3.10 忽略头空格、忽略大小写排序

-b : 忽略头部空格 (默认)

-f : 将所有小写字母转换为大写字母比较

假如有一个test.txt的文件,内容如下:

[root@dongjing sort]# cat test.txt
computer
mouse
LAPTOP
 data
RedHat
 laptop
debian
laptop

需求1:忽略开头空白排序

[root@dongjing sort]# sort -b test.txt
computer
 data
debian
laptop
 laptop
LAPTOP
mouse
RedHat
[root@dongjing sort]# sort test.txt
computer
 data
debian
laptop
 laptop
LAPTOP
mouse
RedHat

可以观察到不加-b 和加上结果是一样的。

需求2: 忽略大小写排序

[root@dongjing sort]# sort -f test.txt
 laptop
 data
computer
debian
LAPTOP
laptop
mouse
RedHat

可以观察到:①开头带有空白的排序到最前面了,这是因为 -f 会将每行所有的字符转换为大写,而空白的大写还是其本身,所以在排序的时候就排到前面了 ② 观察LAPTOP和laptop的位置可以看到我们忽略大小写已经有成效。

注意: 使用-f 会打破默认忽略头空白排序的效果。



Tags:Linux sort命令   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、 介绍sort命令是用来对文字内容(文档)排序使用的。同时也可以排序去重、指定字段排序,按照月份排序、按照数字排序,检查文件是否有序等等。默认情况是按照字典序排序以后标...【详细内容】
2019-09-16  Tags: Linux sort命令  点击:(151)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(41)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条