sort命令详解

工作原理

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

1
2
3
4
5
6
7
8
9
10
[adair@localhost ]$ cat seq.txt
banana
apple
pear
orange
[adair@localhost ]$ sort seq.txt
apple
banana
orange
pear

sort -u

        -u : unique 唯一,排序并且排除重复项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[adair@localhost ]$ cat seq.txt
banana
apple
pear
orange
pear
[adair@localhost ]$ sort seq.txt
apple
banana
orange
pear
pear
[adair@localhost ]$ sort -u seq.txt
apple
banana
orange
pear

        pear由于重复被-u选项无情的移除了。

sort -r

        -r : reverse 反向排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[adair@localhost ]$ cat number.txt
1
3
5
2
4
[adair@localhost ]$ sort number.txt
1
2
3
4
5
[adair@localhost ]$ sort -r number.txt
5
4
3
2
1

sort -o

        -o : output 将排序结果输出到源文件
        sort默认将结果输出到标准输出,所以需要重定向才可以将结果写入文件,形如 sort filename > newfile
        但是如果你想把排序结果输出到原文件中,用重定向不可行

1
2
[adair@localhost ]$ sort -r number.txt > number.txt
[adair@localhost ]$ cat number.txt

        使用 -o 参数可以正常输出到源文件

1
2
3
4
5
6
7
8
9
10
11
12
13
[adair@localhost ]$ cat number.txt
1
3
5
2
4
[adair@localhost ]$ sort -r number.txt -o number.txt
[adair@localhost ]$ cat number.txt
5
4
3
2
1

sort -n

        -n : number 安装数字进行排序,默认数字会被当作字符串进行比较,会出现一下情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[adair@localhost ]$ cat number.txt
1
10
19
11
2
5
[adair@localhost ]$ sort number.txt
1
10
11
19
2
5

        使用 -n 参数以后

1
2
3
4
5
6
7
[adair@localhost ]$ sort -n number.txt
1
2
5
10
11
19

sort -t -k 参数

        -t : tables 指定分隔符,默认tab为分隔符
        -k : 指定安装哪一个分割区域进行排序

1
2
3
4
5
6
7
8
9
10
11
12
13
[adair@localhost ]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
[adair@localhost ]$ sort -n -k 2 -t : facebook.txt
# -n 按照数字进行排序
# -t 此例中指定 : 为分隔符
# -k 此例中按照分割的第二区域进行排序
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

其他的sort常用选项

  • -f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
  • -c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1
  • -C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1
  • -M会以月份来排序,比如JAN小于FEB等等
  • -b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
分享到