一、 介绍

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.txtJunAprSepJulAug

默认排序(不加任何的选项)[root@dongjing sort]# sort month.txtAprAugJulJunSep

默认按照字典序排列

3.1 按照月份排序

[root@dongjing sort]# sort -M month.txtAprJunJulAugSep

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

3.2 按照人类阅读排序

假如我们有一个size.txt文件内容如下,我们排序以后可以得到按照大小排序[root@dongjing sort]# cat size.txt2G30K9M300B30K22M

排序

[root@dongjing sort]# sort -h size.txt300B30K30K9M22M2G

3.3 排序去重

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

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

3.4 倒序(翻转排序)

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

[root@dongjing sort]# sort -hr size.txt2G22M9M30K30K300B

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.txt22111110980

通过3.1我们已经知道sort默认是按照字典序排序,那么这里先试用sort排序看一下结果:[root@dongjing sort]# sort number.txt09111112280

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

[root@dongjing sort]# sort -n number.txt09112280111[root@dongjing sort]#[root@dongjing sort]# sort -g number.txt09112280111

3.7 检查是否有序

判断是否有序可以使用-c 选项实现[root@dongjing sort]# sort -c number.txtsort: 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.txtTom Scala 30Tom Scala 30Tom Java 30aJack Python 95bJack Python 95Jack Spring 95Mike Java 95Linda Linux 85Linda PHP 66Linda Linux 85XY PHP 100XY Java 55Mike Scala 9SS Shell 99

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

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

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

3.9 指定分隔符排序

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

假如我们有一个score.txt的文件内容如下(每行字段之间使用逗号分隔), 每隔字段分别代表: 名称 科目 成绩[root@dongjing sort]# cat score.txtTom,Scala,30Tom,Scala,30Tom,Java,30aJack,Python,95bJack,Python,95Jack,Spring,95Mike,Java,95Linda,Linux,85Linda,PHP,66Linda,Linux,85XY,PHP,100XY,Java,55Mike,Scala,9SS,Shell,99

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

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

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

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

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

假如有一个test.txt的文件,内容如下:[root@dongjing sort]# cat test.txtcomputermouseLAPTOP dataRedHat laptopdebianlaptop

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

[root@dongjing sort]# sort -b test.txtcomputer datadebianlaptop laptopLAPTOPmouseRedHat[root@dongjing sort]# sort test.txtcomputer datadebianlaptop laptopLAPTOPmouseRedHat

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

需求2: 忽略大小写排序[root@dongjing sort]# sort -f test.txt laptop datacomputerdebianLAPTOPlaptopmouseRedHat

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

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

linux sort 源码_Linux: 史上最全的sort命令案例,打包带走吧相关推荐

  1. Hashmap 面试题 + Hashmap 原理 + Hashmap 源码(史上最全)

    HashMap作为我们日常使用最频繁的容器之一,相信你一定不陌生了.今天我们就从HashMap的底层实现讲起,深度了解下它的设计与优化. 常用的数据结构 我在05讲分享List集合类的时候,讲过Arr ...

  2. 史上最全面的 ADB命令 及用法 大全

    史上最全面的 ADB命令 及用法 大全 ADB Usage Complete / ADB 用法大全 https://mazhuang.org/awesome-adb/ ADB,即 Android De ...

  3. mysql5.7.21源码解析,史上最强Mysql5.7源码安装讲解

    今天给小伙伴们介绍一下Mysql5.7源码安装,在安装过程中还是碰到了一些问题,下面介绍安装步骤时,会告诉大家问题在哪儿,怎么解决的,废话不多说,下面就可以说说安装全过程 1.创建用户 groupad ...

  4. dos命令窗口光标闪烁_史上最全的Vim命令(二)

    8. 排版 8.1 基本排版 << 向左缩进一个shiftwidth >> 向右缩进一个shiftwidth :ce(nter) 本行文字居中 :le(ft) 本行文字靠左 : ...

  5. 远程控制桌面,外网电脑PC手机ios安卓mac远程桌面连接内网linux和windows主机,史上最全最详细图文教程

    通过开放的nat123.windows远程桌面.SSH工具,等合理的配置,实现外网远程控制内网远程桌面连接windows和,外网SSH访问内网LINUX主机的实现:在访问端,同时可以是电脑PC,也可以 ...

  6. 史上最全操作系统基础命令

    1.Linux权限 1.1权限的分类:分为3种,可读权限:r   可写权限:w  可执行:x(execute) rw-rw-r (第一个rw是文件所有者的权限,第二个rw是文件所属组用户的权限,r-其 ...

  7. C语言——史上最全通讯录讲解(附源码)

    C语言--史上最全通讯录讲解(附源码) 一.开始界面的打印 二.对六大板块进行定义操作 三.对联系人进行初始化 四.对通讯录进行初始化 4.1动态版本 4.2静态版本 五.通讯录六大功能的具体实现 5 ...

  8. Kafka源码分析10:副本状态机ReplicaStateMachine详解 (图解+秒懂+史上最全)

    文章很长,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈 奉上以下珍贵的学习资源: 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 + 大厂必备 +涨薪 ...

  9. linux python源码安装,linux上源码安装python

    以下例子基于python 2.7.9,其他版本同理.# 1.下载python# wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tg ...

最新文章

  1. (十五)Java springcloud B2B2C o2o多用户商城 springcloud架构-commonservice-sso服务搭建(一)...
  2. 【bzoj 2460 [BeiJing2011]元素】
  3. 几句话就能让你明白:IPv6与Voip
  4. 5whys分析法在美团工程师中的实践
  5. 简述systemd的新特性及unit常见类型分析、使用systemd管理编译安装的nginx
  6. linux apache php显示源码,linux 源码安装apache PHP 问题
  7. java面试手写单链表_(转)面试大总结之一:Java搞定面试中的链表题目
  8. 打包签名时出现Conversion to Dalvik format failed with error 1
  9. Android 使用Webview时,有时抛 java.lang.Throwable: EventHub.removeMessages(int what = 107) warning...
  10. 校园无盘服务器,校园微机系统优化及无盘改造实例.docx
  11. loadrunner脚本中关于httpCode401特殊情况
  12. Delphi编译后的程序图标无法修改一例
  13. Word:公式编辑器亲密接触(转)
  14. css 如何让盒子垂直居中,css 盒子垂直居中
  15. 广州大学机器学习与数据挖掘实验一:线性回归
  16. python怎么算反三角函数_反三角函数怎么算
  17. 你可能不需要担心,AI对你的工作造成威胁:万字长文解读科技革命与人类发展
  18. 基于react的影院购票应用
  19. 3D激光开源项目——BLAM安装使用过程的一些问题
  20. Bakkt能否开启下一轮牛市?这篇「Bakkt专访」一窥究竟

热门文章

  1. Failed to save settings. Please restart Android Studio
  2. CCF CSP 201609-2 火车购票
  3. 微信小程序学习Course 8 本地缓存API
  4. retrofit 源码分析
  5. C#基础——数组(冒泡排序)
  6. 文献阅读方法 如何阅读英文文献 - 施一公(转)
  7. 每个程序员都需要学习 JavaScript 的7个理由
  8. Spring.Net Aop
  9. 无线Trace脚本(旧格式)-平均延时
  10. 今天看论坛,有这样一句话,深有同感,还是家里好