赞
踩
一、功能:
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表示仅对第二列进行数值比较,如此类推
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。