linux 文件 以m排序,使用Sort 对文件排序详解

使用Sort 对文件排序详解

使用Sort 对文件排序详解

当我们处理大量数据时,linux有个常用命令sort,对数据默认进行字符排序,然后标准输出。sort 命令原理默认情况下,sort命令将文件每一行作为进行比较,排序规则:从第一个字符向后,依次按照ASCII码值进行比较,然后依次输出。

91e2af1417e3f226715f44278659302d.png

看上去似乎很简单,但是当排序数字时:

fce7a264a7465e527f7eb6b1d6596fe6.png

并没有按照数字大小来排序

sort -n  数字排序默认情况下,sort将数字当做字符而执行标准字符排序,不是按照大小来排序。实现按照大小排序,需要-n 参数

c96fc27286c42df7b6cc8eedc4db8b5c.png

sort -M  按月排序分析日志文件时,开头经常有个时间戳,sort -M 可以实现按照月份来排序。

sort常用参数-n     按照字符数值来比较-M    按照月份比较-f      忽略字母大小写,默认情况下,会将大写字母排在前面-r      按照降序排列-k     --key=post1,[post2]       按照指定范围比较,从post1 位置开始,如果制定了post2,到post2 位置结束-t     指定一个用来区分键位值得字符来比较 -b    忽略每一行前的所有空白字符,从第一个可见字符比较。

例如:  将 /etc/password 文件根据用户ID值大小进行数值排序可以用-k 和-t 实现按字段分隔的数据进行排序,用-k 参数指定定位分隔符 ":",用-t 参数指定排序的字段,及列数!

bf417b632cf0a00ffbdec7bf3475cad3.png

-K  参数扩展当我们编写shell 脚本是,经常会用到sort -k 一些参数,已下面例子具体说明:

cf40589df4e0f3802e5ef95f567df3ca.png第一列:姓名  第二列:身高  第三列:年龄  第四列:工资a.   若要将上面文件中,按照员工姓名进行排序

6db6441603411c18d8651e4130855da3.png    按照姓名,第一个区域进行比较即可,-k 1,直接得到结果

b.    若要按照身高来比较,进行排序。

0737d4d6258eccedd02454e65b9a5bd2.png  按照身高,数字要加-n,第二个区域比较即可, -k 2,但是lisi 和wangwu 身高一样,这时默认会按照第一区域进行比较,所以lisi在前。C.    若按照身高进行排序,身高相同的员工按照工资升序排序。

7515ffc3012c0fd0eb9d03c84a132af2.png按照身高和工资,这样设定了区域, 加入 -k2  -k4  ,从第2个区域开始比较,如果相同,再以第4个区域排序。(若需要,可以一直在后面加上区域)。d.   若要按照员工工资降序排列,工资相同的以年龄升序排列。

0ccf10a3982347b10e1b8f0439586337.png        先比较工资,要先比较第四个区域,另外要降序,则是 -k4r 在前, 再比较年龄,-k2 ,默认升序,所以为 -k4r -k2.因为比较的都是数字,所以 -n 参数前置,还可以写成:sort -t ‘ ’ -k4rn -k3n sort-test1

e3fbe9094bfe25f452b33aee07906ea4.png

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.      按照姓名的第二个字母排序,如果相同的则按照工资进行降序排列:

77f71e5c0f84bdf12e44513ba0670725.png           因为限定了姓名第二个字母的比较范围,因此第一区域必须FStart和CStar 指定,及-k1.2,1.2 ,再比较工资第四个区域,数字逆序排列,故为-k4nr。

使用Sort 对文件排序详解相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值