sort命令
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
语法
sort (选项) (参数)
选项
-b:忽略每行前面开始出的空格字符; -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符; -f:排序时,将小写字母视为大写字母; -t<分隔字符>:指定排序时所用的栏位分隔字符; -c:检查文件是否已经按照顺序排序; -n:依照数值的大小排序; -M:将前面3个字母依照月份的缩写进行排序; -r:以相反的顺序来排序; -m:将几个排序号的文件进行合并; -k [n,m]:按照指定的字段范围排序。从第n个字段开始,到第m个字(默认到行尾); -o<输出文件>:将排序后的结果存入制定的文件; -u:忽略相同的行 -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符; +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
示例
sort 命令默认是用每行开头的第一个字符来进行排序的,比如:
[root@localhost ~]# sort /etc/passwd #排序用户信息文件 abrt:x:173:173::/etc/abrt:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin …省略部分输出…
如果想要反向排序,则使用“-r”选项,比如:
[root@localhost ~]# sort -r /etc/passwd #反向排序 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin …省略部分输出…
如果想要指定排序的字段,则需要使用"-t"选项指定分隔符,并使用"-k"选项指定字段号。假如我想要按照 UID 字段排序 /etc/passwd 文件,命令如下:
[root@localhost ~]# sort -t":"-k 3,3 /etc/passwd #指定分隔符是":",以第三个字段开头,以第三个字段结尾排序,也就是只用第三个字段排序;当然,"-k"选项可以直接使用"-k 3",代表从第三个字段到行尾都排序(第一个字段先排序,如果一致,则第二个字段再排序,直到行尾)。 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin …省略部分输出…
看起来好像很美,可是如果仔细看看,怎么 daemon 用户的 UID 是 2,反而排在了下面?这是因为 sort 默认是按照字符排序的,前面用户的 UID 的第一个字符都是 1,所以这么排序。要想按照数字排序,请使用"-n"选项,比如:
[root@localhost ~]# sort -t":" -nk 3,3 /etc/passwd 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/spod/lpd:/sbin/nologin ...省略部分输出...