shell中sort命令详解

一、功能:
sort命令可以针对文本文件内容,以行为单位来排序,可以通过选项的使用来满足我们以想要的排序方式来排序

二、常用选项:

选项说明
-b忽略每行前面的空白区域
-d只考虑处理空格和字母字符,数字
-f忽略字母大小写
-m合并已经排序的文件,不排序
-n根据字符串的数字比较
-o将排序后的结果写入文件
-r以相反的顺序来排序(sort默认排序是从上往下是从小到大,加使用-n选项可以翻转排序)
-t指定排序时所用的分隔字符
-k指定需要排序的栏位(列,域)
-u忽略相同行

扩展:在排序的时候我们有可能需要忽略相同的部分,这时候可以使用-u选项或者管道给uniq命令处理,也可以直接输出不重复的部分。如下:
sort -u sort.txt
uniq sort.txt

三、实例:
创建一个文件sort.txt,内容如下:
AAA:2:13
BBB:80:14
CCC:13:18
DDD:45:11
EEE:30:17
DDD:45:11
a.输出所有行,不包括重复的部分:

[root@redhat_192.168.0.12 17:46:11 ~]#sort -u sort.txt           
AAA:2:13
BBB:80:14
CCC:13:18
DDD:45:11
EEE:30:17[root@redhat_192.168.0.12 17:46:17 ~]#uniq sort.txt                  
AAA:2:13
BBB:80:14
CCC:13:18
DDD:45:11
EEE:30:17
DDD:45:11

b.以“:”为分割符,按第二列的大小进行排序

[root@redhat_192.168.0.12 17:46:20 ~]#sort -nk 2 -t: sort.txt     
AAA:2:13
CCC:13:18
EEE:30:17
DDD:45:11
DDD:45:11
BBB:80:14

需要注意的是这里需要加上-n选项,因为只用-k指定列的话bash再比较大小的时候不会把第二列当成一个整体,而是先比较二列的第一个字符,然后比较第二列的第二个字符,结果如下:

[root@redhat_192.168.0.12 17:46:23 ~]#sort -k 2 -t: sort.txt               
CCC:13:18
AAA:2:13
EEE:30:17
DDD:45:11
DDD:45:11
BBB:80:14

是不是发现不要-n选项之后排序就不对了,2比13大,这很明显是错误的,所以需要加上-n选项,bash会根据第二列整个字符串的数字数值大小做比较

再创建一个文件ceshi.txt,内容如下:
[root@redhat_192.168.0.12 18:57:44 ~]#cat ceshi.txt
192.168.0.13
192.168.0.12
23.207.92.222
129.204.222.143
114.114.114.114
114.111.112.114
c.同时对多列排序

[root@redhat_192.168.0.12 18:57:49 ~]#sort -k1,1n -k2,2n -k3,3n -k4,4n ceshi.txt   
23.207.92.222
114.111.112.114
114.114.114.114
129.204.222.143
192.168.0.12
192.168.0.13

当对不同的列进行不同的排序的时候,需要用到k来指定起始列和终止列
-k1,1n 表示对第一列字符串进行比较,1,1表示起始列为第一列,终止列也为第一列
-k2,2n表示仅对第二列进行数值比较,如此类推

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值