



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始!sort的工作原理sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。[rocrocket@rocrocketprogramming]$catseq.txtbananaapplepearorange[rocrocket@rocrocketprogramming]$sortseq.txtapplebananaorangepearsort的-u选项它的作用很简单,就是在输出行中去除重复行。[rocrocket@rocrocketprogramming]$catseq.txtbananaapplepearorangepear[rocrocket@rocrocketprogramming]$sortseq.txtapplebananaorangepearpear[rocrocket@rocrocketprogramming]$sort-useq.txtapplebananaorangepearpear由于重复被-u选项无情的删除了。sort的-r选项sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。[rocrocket@rocrocketprogramming]$catnumber.txt13524[rocrocket@rocrocketprogramming]$sortnumber.txt12345[rocrocket@rocrocketprogramming]$sort-rnumber.txt543214sort的-o选项由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sortfilename>newfile。但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。[rocrocket@rocrocketprogramming]$sort-rnumber.txt>number.txt[rocrocket@rocrocketprogramming]$catnumber.txt[rocrocket@rocrocketprogramming]$看,竟然将number清空了。就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。[rocrocket@rocrocketprogramming]$catnumber.txt13524[rocrocket@rocrocketprogramming]$sort-rnumber.txt-onumber.txt[rocrocket@rocrocketprogramming]$catnumber.txt543215sort的-n选项你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。我们如果想改变这种现状,就要使用-n选项,来告诉sort,”要以数值来排序”![rocrocket@rocrocketprogramming]$catnumber.txt110191125[rocrocket@rocrocketprogramming]$sortnumber.txt110111925[rocrocket@rocrocketprogramming]$sort-nnumber.txt1251011196sort的-t选项和-k选项如果有一个文件的内容是这样:[rocrocket@rocrocketprogramming]$catfacebook.txtbanana:30:5.5apple:10:2.5pear:90:2.3orange:20:3.4这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣〜〜)指定了间隔符之后,就可以用-k来指定列数了。[rocrocket@rocrocketprogramming]$sort-n-k2-t:facebook.txtapple:10:2.5orange:20:3.4banana:30:5.5pear:90:2.3我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。7其他的sort常用选项-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1-M会以月份来排序,比如JAN小于FEB等等-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。有时候学习脚本,你会发现sort命令后面跟了一堆类似-k1,2,或者-k1.2-k3.4的东东,有些匪夷所思。今天,我们就来搞定它一-k选项!1准备素材$catfacebook.txtgoogle1105000baidu1005000guge503000sohu1004500第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资。(除了公司名称,其他的别信,都瞎写的人_人)2我想让这个文件按公司的字母顺序排序,也就是按第一个域进行排序:(这个facebook.txt文件有三个域)$sort-t„„-k1facebook.txtbaidu1005000google1105000guge503000sohu1004500看到了吧,就直接用-k1设定就可以了。(其实此处并不严格,稍后你就会知道)3我想让facebook.txt按照公司人数排序$sort-n-t„„-k2facebook.txtguge503000baidu1005000sohu1004500google1105000不用解释,我相信你能懂。但是,此处出现了问题,那就是baidu和sohu的公司人数相同,都是100人,这个时候怎么办呢?按照默认规矩,是从第一个域开始进行升序排序,因此baidu排在了sohu前面。4我想让facebook.txt按照公司人数排序,人数相同的按照员工平均工资升序排序:$sort-n-t„„-k2-k3facebook.txtguge503000sohu1004500baidu1005000google1105000看,我们加了一个-k2-k3就解决了问题。对滴,sort支持这种设定,就是说设定域排序的优先级,先以第2个域进行排序,如果相同,再以第3个域进行排序。(如果你愿意,可以一直这么写下去,设定很多个排序优先级)5我想让facebook.txt按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序:(这个有点难度喽)$sort-n-t„„-k3r-k2facebook.txtbaidu1005000google1105000sohu1004500guge503000此处有使用了一些小技巧,你仔细看看,在-k3后面偷偷加上了一个小写字母r。你想想,再结合我们上一篇文章,能得到答案么?揭晓:r和-r选项的作用是一样的,就是表示逆序。因为sort默认是按照升序排序的,所以此处需要加上r表示第三个域(员工平均工资)是按照降序排序。此处你还可以加上n,就表示对这个域进行排序时,要按照数值大小进行排序,举个例子吧:$sort-t„„-k3nr-k2nfacebook.txtbaidu1005000google1105000sohu1004500guge503000看,我们去掉了最前面的-n选项,而是将它加入到了每一个-k选项中了。6-k选项的具体语法格式要继续往下深入的话,就不得不来点理论知识。你需要了解-k选项的语法格式,如下:[FStart[.CStart]][Modifier][,[FEnd[.CEnd]][Modifier]]这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k2和-k3就是省略了C.Start的例子喽。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。7突发奇想,从公司英文名称的第二个字母开始进行排序:$sort-t„„-k1.2facebook.txtbaidu1005000sohu1004500google1105000guge503000看,我们使用了-k1.2,这就表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。8又突发奇想,,只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:$sort-t„„-k1.2,1.2-k3,3nrfacebook.txtbaidu1005000google1105000sohu1004500guge503000由于只对第二个字母进行排序,所以我们使用了-k1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排序,我们也使用了-k3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序”了。9在modifier部分还可以用到哪些选项?可以用到b、d、f、i、n或r。其中n和r你肯定已经很熟悉了。b表示忽略本域的签到空白符号。d表示对本域按照字典顺序排序(即,只考虑空白和字母)。f表示对本域忽略大小写进行排序。i表示忽略“不可打印字符”,只针对可打印字符进行排序。(有些ASCII就是不可打印字符,比如\a是报警,\b是退格,\n是换行,\r是回车等等)10思考思考关于-k和-u联合使用的例子:$catfacebook.txtgoogle1105000baidu1005000guge503000sohu1004500这是最原始的facebook.txt文件。$sort-n-k2facebook.txtguge503000baidu1005000sohu1004500google1105000$sort-n-k2-ufacebook.txtguge503000baidu1005000google1105000当设定以公司员工域进行数值排序,然后加-u后,sohu一行就被删除了!原来-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。$sort-k1-ufacebook.txtbaidu1005000google1105000guge503000sohu1004500$sort-k1.1,1.1-ufacebook.txtbaidu1005000google1105000sohu1004500这个例子也同理,开头字符是g的guge就没有幸免于难。$sort-n-k2-k3-ufacebook.txtguge503000sohu1004500baidu1005000google1105000咦!这里设置了两层排序优先级的情况下,使用-u就没有删除任何行。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的:)(不信,你可以自己加一行sina1004500试试看)11最诡异的排序:$sort-n-k2.2,3.1facebook.txtguge503000baidu1005000sohu1004500google1105000以第二个域的第二个字符开始到第三个域的第一个字符结束的部分进行排序。第一行,会提取03,第二行提取005,第三行提取004,第四行提取105。又因为sort认为0小于00小于000小于0000....因此03肯定是在第一个。105肯定是在最后一个。但为什么005却在004前面呢?(你可以自己做实验思考一下。)答案揭晓:原来“跨域的设定是个假象”,sort只会比较第二个域的第二个字符到第二个域的最后一个字符的部分,而不会把第三个域的开头字符纳入比较范围。当发现00和00相同时,sort就会自动比较第一个域去了。当然baidu在sohu前面了。用一个范例即可证实:$sort-n-k2.2,3.1-k1,1rfacebook.txtguge503000sohu1004500baidu1005000google110500012有时候在sort命令后会看到+1-2这些符号,这是什么东东?关于这种语法,最新的sort是这么进行解释的:Onoldersystems,'sort,supportsa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- LY/T 2762-2024黄精
- 2025至2030年中国平衡重式电动车数据监测研究报告
- 2025至2030年中国PVC防静电胶地板数据监测研究报告
- 【假期提升】 五升六语文暑假作业(十三)-人教部编版(含答案含解析)
- 2025年消防设施操作员之消防设备中级技能提升训练试卷A卷附答案
- 城步中考数学试题及答案
- 采购与制造分包合同(2篇)
- 高等教育自学考试《00102世界市场行情》模拟试卷二
- 2024年广东省公务员《申论(省市级)》试题真题及答案
- 内燃机基础知识培训课件
- 2025年天翼云解决方案架构师认证考试指导题库-上(单选题)
- 2025年广东省深圳市高考语文一模试卷
- 2025年春人教版英语八年级下册同步课件 Unit 7 Whats the highest mountain in the world课件 Section A 1a-2d
- 2025年哈尔滨铁道职业技术学院单招职业倾向性测试题库必考题
- 行为规范教育中学校长在国旗下讲话:严格要求自己规范自己的行为
- 2025年福建省高职单招职业适应性测试题库及答案解析
- 七下综合世界真奇妙-共享“地球村”
- 自媒体运营实战教程(抖音版) 课件 第7章 短视频运营-自媒体中级
- 2025年信阳职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025-2030年中国eva热熔胶行业运营状况与发展潜力分析报告
- 2024年广东职业技术学院高职单招语文历年参考题库含答案解析
评论
0/150
提交评论