Thursday, February 26, 2009

023 排序命令

排序命令用于对一个文件中的每一行进行排序。我们有一个示例文件,下面的命令将基于这个文件对其中的内容进行排序。如下所示是这个文件的格式:
employee_name:employee_id:department_name.

 cat names.txt 

Emma Thomas:100:Marketing
Alex Jason:200:Sales
Madison Randy:300:Product Development
Sanjay Gupta:400:Support
Nisha Singh:500:Sales

按升序排列
 sort names.txt 

Alex Jason:200:Sales
Emma Thomas:100:Marketing
Madison Randy:300:Product Development
Nisha Singh:500:Sales
Sanjay Gupta:400:Support

按降序排列
 sort -r names.txt

Sanjay Gupta:400:Support
Nisha Singh:500:Sales
Madison Randy:300:Product Development
Emma Thomas:100:Marketing
Alex Jason:200:Sales

以一个以冒号(:)分隔字段的文件中的第二个字段进行(employee_id)
 sort -t: -k 2 names.txt 

Emma Thomas:100:Marketing
Alex Jason:200:Sales
Madison Randy:300:Product Development
Sanjay Gupta:400:Support
Nisha Singh:500:Sales

对文件中的第三个字段进行排序(department_name)并禁止对重复字段的显示
 sort -t: -u -k 3 names.txt

Emma Thomas:100:Marketing
Madison Randy:300:Product Development
Alex Jason:200:Sales
Sanjay Gupta:400:Support

对password文件的第三个字段进行排序(数字型的userid)
 sort -t: -k 3n /etc/passwd | more 

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

按照ip地址对/etc/hosts 文件内容进行排序
 sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

127.0.0.1 localhost.localdomain localhost
192.168.100.101 dev-db.thegeekstuff.com dev-db
192.168.100.102 prod-db.thegeekstuff.com prod-db
192.168.101.20 dev-web.thegeekstuff.com dev-web
192.168.101.21 prod-web.thegeekstuff.com prod-web

结合其他命令使用sort命令
  • ps –ef | sort :对过程处理结果进行排序
  • ls -al | sort +4n :按照文件的大小升序排列。比如有5个文件,尺寸最小的排在最上面。
  • ls -al | sort +4nr :按照文件的大小升序排列。比如有5个文件,尺寸最大的排在最上面。

No comments:

Post a Comment