仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1268|回复: 16
打印 上一主题 下一主题

[其他Linux] Linux设计《sort命令的k选项年夜会商》-linux命令五分钟系列之二十七仓酷云 ...

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:25:27 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你学不好的话,你在linux中开发的机会就很少,或者说几乎没有,它的优势就消失了,然后随着时间的流逝,你就会全部忘记她;
偶然候进修剧本,你会发明sort命令前面跟了一堆相似-k1,2,大概-k1.2-k3.4的东东,有些匪夷所思。明天,我们就来弄定它—-k选项!
1筹办素材
$catfacebook.txt
google1105000
baidu1005000
guge503000
sohu1004500
第一个域是公司称号,第二个域是公司人数,第三个域是员工均匀人为。(除公司称号,其他的别信,都瞎写的^_^)
2我想让这个文件按公司的字母按次排序,也就是按第一个域举行排序:(这个facebook.txt文件有三个域)
$sort-t‘‘-k1facebook.txt
baidu1005000
google1105000
guge503000
sohu1004500
看到了吧,就间接用-k1设定就能够了。(实在此处其实不严厉,稍后你就会晓得)
3我想让facebook.txt依照公司人数排序
$sort-n-t‘‘-k2facebook.txt
guge503000
baidu1005000
sohu1004500
google1105000
不必注释,我信任你能懂。
可是,此处呈现了成绩,那就是baidu和sohu的公司人数不异,都是100人,这个时分怎样办呢?依照默许礼貌,是从第一个域入手下手举行升序排序,因而baidu排在了sohu后面。
4我想让facebook.txt依照公司人数排序,人数不异的依照员工均匀人为升序排序:
$sort-n-t‘‘-k2-k3facebook.txt
guge503000
sohu1004500
baidu1005000
google1105000
看,我们加了一个-k2-k3就办理了成绩。对滴,sort撑持这类设定,就是说设定域排序的优先级,先以第2个域举行排序,假如不异,再以第3个域举行排序。(假如你乐意,能够一向这么写下往,设定良多个排序优先级)
5我想让facebook.txt依照员工人为降序排序,假如员工人数不异的,则依照公司人数升序排序:(这个有点难度喽)
$sort-n-t‘‘-k3r-k2facebook.txt
baidu1005000
google1105000
sohu1004500
guge503000
此处有利用了一些小技能,你细心看看,在-k3前面偷偷加上了一个小写字母r。你想一想,再分离我们上一篇文章,能失掉谜底么?发表:r和-r选项的感化是一样的,就是暗示逆序。由于sort默许是依照升序排序的,以是此处必要加上r暗示第三个域(员工均匀人为)是依照降序排序。此处你还能够加上n,就暗示对这个域举行排序时,要依照数值巨细举行排序,举个例子吧:
$sort-t‘‘-k3nr-k2nfacebook.txt
baidu1005000
google1105000
sohu1004500
guge503000
看,我们往失落了最后面的-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.txt
baidu1005000
sohu1004500
google1105000
guge503000
看,我们利用了-k1.2,这就暗示对第一个域的第二个字符入手下手到本域的最初一个字符为止的字符串举行排序。你会发明baidu由于第二个字母是a而名列榜首。sohu和google第二个字符都是o,但sohu的h在google的o后面,以是二者分离排在第二和第三。guge只能屈居第四了。
8又突发奇想,,只针对公司英文称号的第二个字母举行排序,假如不异的依照员工人为举行降序排序:
$sort-t‘‘-k1.2,1.2-k3,3nrfacebook.txt
baidu1005000
google1105000
sohu1004500
guge503000
因为只对第二个字母举行排序,以是我们利用了-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.txt
google1105000
baidu1005000
guge503000
sohu1004500
这是最原始的facebook.txt文件。
$sort-n-k2facebook.txt
guge503000
baidu1005000
sohu1004500
google1105000
$sort-n-k2-ufacebook.txt
guge503000
baidu1005000
google1105000
当设定以公司员工域举行数值排序,然后加-u后,sohu一行就被删除!本来-u只辨认用-k设定的域,发明不异,就将后续不异的行都删除。
$sort-k1-ufacebook.txt
baidu1005000
google1105000
guge503000
sohu1004500
$sort-k1.1,1.1-ufacebook.txt
baidu1005000
google1105000
sohu1004500
这个例子也同理,开首字符是g的guge就没有幸免于难。
$sort-n-k2-k3-ufacebook.txt
guge503000
sohu1004500
baidu1005000
google1105000
咦!这里设置了两层排序优先级的情形下,利用-u就没有删除任何行。本来-u是会衡量一切-k选项,将都不异的才会删除,只需个中有一级分歧都不会容易删除的:)(不信,你能够本人加一行sina1004500碰运气)
11最诡异的排序:
$sort-n-k2.2,3.1facebook.txt
guge503000
baidu1005000
sohu1004500
google1105000
以第二个域的第二个字符入手下手到第三个域的第一个字符停止的部分举行排序。
第一行,会提取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.txt
guge503000
sohu1004500
baidu1005000
google1105000

写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。以上是我学习Linux的心得体会,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
柔情似水 该用户已被删除
沙发
 楼主| 发表于 2015-3-5 06:13:30 | 显示全部楼层
感谢老师和同学们在学习上对我的帮助。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-30 13:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表