排序命令sort

sort是很有趣的命令,它可以帮助我们进行排序,而且可以依据不同的数据类型来排序.

语法:

sort   [-fbMnrtuk]   [file or stdin] [-o 输出文件]

常见参数:

-f : 忽略大小写的差异,例如A与a视为编码相同;

-b : 忽略最前面的空格符部分;

-M : 以月份的名字来排序,例如 JAN、DEC等的排序方法;

-n : 使用’纯数字’进行排序(默认以文字类型来排序的);

-o<输出文件> : 将排序后的结果存入指定的文件;

-r : 反向排序(默认是升序);

-t : 分隔符,默认使用[Tab]键来分割;

-u : 就是uniq,相同的数据中,仅出现一行代表;

-k : 以那个区间(filed) 来进行排序的意思.

 

[root@sqj2015 ~]# cat /etc/passwd | head -10 |sort -t ‘:’ -k 3

root:x:0:0:root:/root:/bin/bash

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

 

[root@sqj2015 ~]# cat /etc/passwd | head -10 |sort -t ‘:’ -k 3 -n

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

这里以第三列来排序,sort默认是文字排序,看到排序结果是不是觉得很奇怪?而我们加上-n选项来进行数字排序,是不是觉得舒服多了呢.

 

由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile.

但是,如果你想把排序结果输入到原文件中,用重定向可就不行了,如下:

[root@sqj2015 ~]# cat test.txt

1

2

3

4

5

[root@sqj2015 ~]# sort -r test.txt > test.txt

[root@sqj2015 ~]# cat test.txt

看,竟然将test.txt清空了.

那我们试试-o 选项,如下:

[root@sqj2015 ~]# sort -r test.txt -o test.txt

[root@sqj2015 ~]# cat test.txt

5

4

3

2

1

它成功解决了这个问题,让你放心的将结果写入原文件.