首页 > 代码库 > linux sort命令

linux sort命令

1、sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

?
1
2
3
4
5
6
7
8
9
10
[root@rusky ~]# cat seq.txt 
banana
apple
pear
orange
[root@rusky ~]# sort seq.txt   #默认升序
apple
banana
orange
pear

2、sort -u 选项---去除重复行

?
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@rusky ~]# cat seq.txt
banana
apple
pear
orange
pear
 
[root@rusky ~]# sort -u seq.txt
 
apple
banana
orange
pear

3、sort -r 选项----降序  

?
1
2
3
4
5
6
7
8
9
10
11
[root@rusky ~]# sort -u seq.txt
 
apple
banana
orange
pear
[root@rusky ~]# sort -ur seq.txt
pear
orange
banana
apple

4、sort -o选项----重定向,在linux下与 >相同

[root@rusky ~]# cat seqNO.txt 
1
2
3
4
5

[root@rusky ~]# sort -r seqNO.txt > number.txt
[root@rusky ~]# cat number.txt 
5
4
3
2
1

[root@rusky ~]# sort -r seqNO.txt -o number2.txt
[root@rusky ~]# cat number2.txt 
5
4
3
2
1

5、sort -n 选项---以数值排序 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[root@rusky ~]# cat seq2    #排序程序将这些数字按字符来排序了,排序程序会先比较1和2,所以下面的升序中1反而最大。
1
2
5
8
10
11
100
[root@rusky ~]# sort seq2                                                                                         
1
10
100
11
2
5
8
[root@rusky ~]# sort -r seq2
8
5
2
11
100
10
1
[root@rusky ~]# sort -n seq2  #-n以数值排序
1
2
5
8
10
11
100
[root@rusky ~]# sort -nr seq2
100
11
10
8
5
2
1
[root@rusky ~]# cat seq2
1
2
5
8
10
11
100
apple
banana
peal
orange
[root@rusky ~]# sort -n seq2  #当排序文件有字符和数字,先排序字符,再排序数字
apple
banana
orange
peal
1
2
5
8
10
11
100
[root@rusky ~]# sort -r seq2
peal
orange
banana
apple
8
5
2
11
100
10
1
[root@rusky ~]# sort -rn seq2
100
11
10
8
5
2
1
peal
orange
banana
apple

6、sort -t -k选项---t指定分隔符,-k指定以哪一列进行排序

?
1
2
3
4
5
6
7
8
9
10
[root@rusky ~]# cat score  #共三列,假使:第一列表示姓名,第二列表示数学分数,第三列表示英语分数
Rusky,80, 90
Jack ,90, 100
Anna ,75, 80
Tom  ,88, 70
[root@rusky ~]# sort -n -k 2 -t , score   #以第二列数学分数重新排序,分隔符为逗号
Anna ,75, 80
Rusky,80, 90
Tom  ,88, 70
Jack ,90, 100

  [root@rusky ~]# sort -n -k 2 -t ‘ ‘ score2    #如果分隔符为空格,则用单引号,中间加空格即可
  Anna 75 80
  Rusky 80 90
  Tom 88 70
  Jack 90 100

   [root@rusky ~]# sort -k 1 score
   Anna ,75, 80
   Jack ,90, 100
   Rusky,80, 90
   Tom ,88, 70

7 其他的sort常用选项

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-M会以月份来排序,比如JAN小于FEB等等

-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

以数值,第二列进行排序,如果第二列有相同的,则以第三列进行排序
[root@rusky ~]# cat score2
Rusky 80  90
Jack  90  100
Anna  75  80
Tom   80  70
[root@rusky ~]# sort -n -k 2 -k 3 -t   score2
Anna  75  80
Tom   80  70
Rusky 80  90
Jack  90  100
以第三列值逆序排序
[root@rusky ~]# sort -t   -k 3nr score2 
Jack  90  100
Rusky 80  90
Tom   80  70
Anna  75  80
以第二列值逆序排序,如果相同值,则以第三列长升序排序
[root@rusky ~]# sort -t   -k 2nr -k 3n score2
Jack  90  100
Tom   80  70
Rusky 80  90
Anna  75  80

《FROM:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html》