Linux/Unix知识点

shell按特定要求进行文件排序

2017-02-08  本文已影响14人  乾九二
797F8CA3A9A93ADCC60795AF6CC23299.png

命令


选项


实例


$> cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5 
$> sort sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5

忽略相同行使用-u选项或者uniq

$> cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
$> sort -u sort.txt 
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3 
ddd:40:4.4
eee:50:5.5
# 或者
$> uniq sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5

sort的-n、-r、-k、-t选项的使用

说明

$> cat sort.txt
AAA:BB:CC
aaa:30:1.6
ccc:50:3.3
ddd:20:4.2
bbb:10:2.5
eee:40:5.4
eee:60:5.1

将BB列按照数字从小到大顺序排列

$> sort -nk 2 -t: sort.txt
AAA:BB:CC
bbb:10:2.5
ddd:20:4.2
aaa:30:1.6
eee:40:5.4 
ccc:50:3.3 
eee:60:5.1
将CC列数字从大到小顺序排列:
$> sort -nrk 3 -t: sort.txt
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6 
AAA:BB:CC

-k选项的具体语法格式

FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End-------- 
FStart.CStart 选项 , FEnd.CEnd 选项
例子
$ sort -t ' ' -k 1.2 facebook.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只能屈居第四了。

$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
baidu 100 5000 
google 110 5000 
sohu 100 4500 
guge 50 3000 

由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。

来自: http://man.linuxde.net/sort

上一篇下一篇

猜你喜欢

热点阅读