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
它成功解决了这个问题,让你放心的将结果写入原文件.