linux sort命令详解
功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。
语 法:sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
参 数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息。
sort的-u选项
作用很简单,就是在输出行中去除重复行。
[root@geralt-workpc ~]# sort A.txt
apple
gold
iron
orenge
silver
steel
steel
[root@geralt-workpc ~]# sort -u A.txt
apple
gold
iron
orenge
silver
steel
sort的-r选项
sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定。
[root@geralt-workpc ~]# sort A.txt
apple
gold
iron
orenge
silver
steel
steel
[root@geralt-workpc ~]# sort -r A.txt
steel
steel
silver
orenge
iron
gold
apple
sort的-o选项
把排序结果输出到原文件
[root@geralt-workpc ~]# sort B.txt
carrot
cookies
gold
orenge
[root@geralt-workpc ~]# sort -r B.txt -o B.txt
[root@geralt-workpc ~]# cat B.txt
orenge
gold
cookies
carrot
sort的-t选项和-k选项
如果有一个文件的内容是这样:
[root@geralt-workpc ~]# cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。
以水果数量来排序,也就是以第二列来排序,如何利用sort实现?
[root@geralt-workpc ~]# sort -n -k 2 -t : facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
-k选项
[root@geralt-workpc ~]# cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
假设第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资
按公司的字母顺序排序
[root@geralt-workpc ~]# sort -t ' ' -k 1 facebook.txt
baidu 100 5000
google 110 5000
guge 50 3000
sohu 100 4500
按照公司人数排序
[root@geralt-workpc ~]# sort -n -t ' ' -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
按照公司人数排序,人数相同的按照员工平均工资升序排序
[root@geralt-workpc ~]# sort -n -t ' ' -k 2 -k 3 facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序
[root@geralt-workpc ~]# sort -n -t ' ' -k 3r -k 2 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
从公司英文名称的第二个字母开始进行排序
[root@geralt-workpc ~]# sort -t ' ' -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
-u选项
[root@geralt-workpc ~]# sort -n -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
[root@geralt-workpc ~]# sort -n -k 2 -u facebook.txt
guge 50 3000
baidu 100 5000
google 110 5000
[root@geralt-workpc ~]# sort -k 1.1,1.1 -u facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
发现-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。
[root@geralt-workpc ~]# sort -n -k 2 -k 3 -u facebook.txt
guge 50 3000
sohu 100 4500
baidu 100 5000
google 110 5000
设置了两层排序优先级的情况下,使用-u就没有删除任何行。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的