linux sort命令详解


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选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的

相关内容

    暂无相关文章