linux排序之sort
处理过程
sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法
sort [选项] [参数]
选项
-u 忽略相同行
-n 以数字形式进行比较,默认为字符串
-r 从大到小,默认从小到大
-t 指定分隔符
-k 指定根据哪个字段来排序
-k语法格式
FStart.CStart Modifier, FEnd.CEnd Modifier
-k的语法格式格式可以根据逗号,分割成两大部分,前面一部分为Start,后面一部分为End,其中Modifier就是上述选项部分
Start部分
FStart.CStart Modifier
FStart:表示开始的域
C.Start:表示在FStart
域中从第几个字符开始算“排序首字符”,C.Start
可以省略的,省略的话就表示从本域的开头部分开始
End部分
FEnd.CEnd Modifier
FEnd:表示结束的域
CEnd:表示在FEnd
域中到第几个字符结束算“排序尾字符”,CEnd可以省略的,省略的话就表示到本域的结尾部分结束
# 从公司英文名称的第二个字母开始进行排序
[root@VM_0_13_centos ~]# cat test.txt
baidu 100 5000
guge 50 3000
sohu 100 4500
google 110 5000
[root@VM_0_13_centos ~]# sort -t ' ' -k 1.2 test.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
# 使用了-k 1.2
,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了
# 只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序
[root@VM_0_13_centos ~]# cat test.txt
baidu 100 5000
guge 50 3000
sohu 100 4500
google 110 5000
[root@VM_0_13_centos ~]# sort -t ' ' -k 1.2,1.2 -nrk 3,3 test.txt
google 110 5000
baidu 100 5000
sohu 100 4500
guge 50 3000
# 由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2
的表示方式,表示我们“只”对第二个字母进行排序。
# 按照ip地址的第四段进行排序
[root@VM_0_13_centos ~]# cat ip.list
123.245.90.30
245.90.20.10
18.9.100.20
200.10.190.30
255.255.255.255
[root@VM_0_13_centos ~]# sort -rn -t "." -k 4,4 ip.list
255.255.255.255
200.10.190.30
123.245.90.30
18.9.100.20
245.90.20.10
去重uniq
sort -rn num.txt|uniq