当我们处理大量数据时,linux有个常用命令sort,对数据默认进行字符排序,然后标准输出。
  1. sort 命令原理
 默认情况下,sort命令将文件每一行作为进行比较,排序规则:从第一个字符向后,依次按照ASCII码值进行比较,然后依次输出。
看上去似乎很简单,但是当排序数字时:
并没有按照数字大小来排序
  1.   sort -n  数字排序 
默认情况下,sort将数字当做字符而执行标准字符排序,不是按照大小来排序。实现按照大小排序,需要-n 参数
  1.  sort -M  按月排序
分析日志文件时,开头经常有个时间戳,sort -M 可以实现按照月份来排序。
  1.  sort常用参数
-n     按照字符数值来比较
-M    按照月份比较
-f      忽略字母大小写,默认情况下,会将大写字母排在前面
-r      按照降序排列
-k     --key=post1,[post2]       按照指定范围比较,从post1 位置开始,如果制定了post2,到post2 位置结束
-t     指定一个用来区分键位值得字符来比较 
-b    忽略每一行前的所有空白字符,从第一个可见字符比较。
例如:  将 /etc/password 文件根据用户ID值大小进行数值排序
   可以用-k 和-t 实现按字段分隔的数据进行排序,用-k 参数指定定位分隔符 ":",用-t 参数指定排序的字段,及列数!
  1.   -K  参数扩展
当我们编写shell 脚本是,经常会用到sort -k 一些参数,已下面例子具体说明:
第一列:姓名  第二列:身高  第三列:年龄  第四列:工资
a.   若要将上面文件中,按照员工姓名进行排序
按照姓名,第一个区域进行比较即可,-k 1,直接得到结果
b.    若要按照身高来比较,进行排序。
    按照身高,数字要加-n,第二个区域比较即可, -k 2,但是lisi 和wangwu 身高一样,这时默认会按照第一区域进行比较,所以lisi在前。
C.    若按照身高进行排序,身高相同的员工按照工资升序排序。
     按照身高和工资,这样设定了区域, 加入 -k2  -k4  ,从第2个区域开始比较,如果相同,再以第4个区域排序。(若需要,可以一直在后面加上区域)。
d.   若要按照员工工资降序排列,工资相同的以年龄升序排列。
先比较工资,要先比较第四个区域,另外要降序,则是 -k4r 在前, 再比较年龄,-k2 ,默认升序,所以为 -k4r -k2.
因为比较的都是数字,所以 -n 参数前置,还可以写成:   sort -t ‘ ’ -k4rn -k3n sort-test1
  1.   sort -k参数扩展二
了解-k选项的语法格式,如下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
如果不设定End部分,那么就认为End被设定为行尾。
FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
  a.      按照姓名的第二个字母排序:
         -k1.2   ,比较的第一个区域的第2个字母开始,到本区域的最好一个字符结束,来进行比较。故zhangsan 和zhaoxiaoliu ,n在o的前面,所以zhangsan排在前面。
    b.      按照姓名的第二个字母排序,如果相同的则按照工资进行降序排列:
因为限定了姓名第二个字母的比较范围,因此第一区域必须FStart和CStar 指定,及-k1.2,1.2 ,再比较工资第四个区域,数字逆序排列,故为-k4nr。
 

使用Sort 对文件排序详解相关推荐

  1. Linux 中使用 sort 指令分组排序详解

    Linux 中使用 sort 指令分组排序详解 sort 中进行分组排序主要用到的选项为 -k,此文,我们着重于该选项的使用方式,用到的其它选项不做解释,有兴趣的同学可以查看帮助文档 1. 数据准备 ...

  2. MySQL——Using Filesort文件排序详解

    文章目录 前言 filesort文件排序方式 单路排序或双路排序的选择 trace工具测试单双路排序 文件排序方式选择 前言 在之前,分析SQL索引使用情况时,使用 Explain执行计划参数说明 进 ...

  3. C++中的结构体vector排序详解

    C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...

  4. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

  5. Pom.xml文件教程详解

    原创整理不易,转载请注明出处:史上最全的maven pom.xml文件教程详解 代码下载地址:http://www.zuidaima.com/share/1781583829978112.htm   ...

  6. k8s的yaml文件配置详解(三)

    k8s的服务资源文件配置详解 注:本文章只作配置项解释,请灵活运用 --- #Service kind: Service apiVersion: v1 metadata: name: service ...

  7. 八大排序 详解(下)——指向函数的指针 的使用

    <八大排序 详解(上)> <八大排序 详解(中)> 紧接前两篇博文,我们这篇博文所要讲解的是我们前两篇博文编写的所有函数的使用.生成随机数组的函数的讲解以及一种及其凶悍的调用方 ...

  8. 43. Systemd的Unit配置详解,unit文件位置,优先级,unit类型,unit文件字段详解,Unit/Service/Install字段,添加mysql服务等例子

    Systemd的Unit配置详解,unit文件位置和优先级,unit文件类型,unit文件字段详解,[Unit]字段,[Service]字段,[Install]字段,添加服务,创建.service 文 ...

  9. 十大排序详解(java实现)

    十大排序详解(java实现) 一.十大排序算法概述 1.定义 2.分类 3.比较 4.相关概念 二.各算法原理及实现 1.冒泡排序 2.简单选择排序(Selection Sort) 3.直接插入排序( ...

最新文章

  1. 0730------Linux网络编程----------服务器端模型(迭代,多进程,多线程,select,poll,epoll 等)...
  2. mugen4g补丁如何使用_如何搜索下载游戏
  3. listView动态加载数据分页
  4. php 集合安装,centos7安装php5.6报错集合
  5. 符合skyline的3dml网络发布服务
  6. JDK源码(10)-Integer(用处最多,重点讲解)
  7. Django中Form组件的使用
  8. 计算机械加工工时都需要,机械加工工时(工时定额)计算软件
  9. CAD增强属性块的还原
  10. 模拟银行排队叫号机 2011.04.18
  11. 单晶硅各向异性刻蚀技术
  12. 数据处理的神来之笔 解决缓存击穿的终极利器 1
  13. ORACLE 体系结构详细图
  14. protocol协议号协议说明
  15. 互联网电视变身哄娃神器:YOYO搜片真方便
  16. 首届实时渲染3D动画创作大赛结果公布,看大奖英伟达A6000花落谁家
  17. 搜狗微信下线了怎么获取公众号文章?手把手教你最新获取方式
  18. COOX培训材料 — PMT(5.物料配方工单)
  19. Python-Django毕业设计安卓基于Android的手机点餐App系统(程序+LW)
  20. 代码原型模板_原型值得一千行代码

热门文章

  1. HTML首行缩进两字符
  2. 瑞波Ripple概念解析-共识Consensus(官方文档不完全翻译)
  3. Win10家庭版找不到组策略gpedit.msc解决方法
  4. Mac mini 2011 到 macOS Catalina
  5. python 1到10000的累加和_Python练习题 020:累积累加
  6. T-Bio2023第三届亚洲生物医药创新及质量科技峰会将于1月在上海召开
  7. Windows命令--ipconfig--使用/详解
  8. 从零开始的数据挖掘课复习(预习)
  9. 自定义View之--九宫格图形密码锁
  10. 智慧港口——基于二三维一体化GIS的港口可视化监管平台