当前位置:   article > 正文

shell中sort命令详解_shell sort

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

需要注意的是这里需要加上-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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

是不是发现不要-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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/628060
推荐阅读
相关标签
  

闽ICP备14008679号