码迷,mamicode.com
首页 > 系统相关 > 详细

Linux中sort命令

时间:2014-09-21 21:56:21      阅读:398      评论:0      收藏:0      [点我收藏+]

标签:linux

Linux sort命令用于将文本文件内容按某种方式排序,默认是ASCII码方式:

语法说明:

  • sort[-bcdfimMnur][-o<输出文件>][-t<分隔字符>][-k<n,m>][文件]

常用参数:

  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -u 排除重复项
  • -r 以相反的顺序来排序。
  • -t<分隔字符> 指定排序时所用的栏位分隔字符。
  • --help 显示帮助。
  • --version 显示版本信息。
  • -k[n[,m]]指定一个或几个字段作为排序关键字,字段位置从n开始,到m为止(包括n,不包括m)。如不指定m,则关键字为从n到行尾。字段和字符的位置从0开始,第一列为1。
常用例子:

  • 01. 对file文件,按照ASCII排序

[root@host ~]# cat file
Unix
Linux
Solaris
AIX
Linux
HPUX
[root@host ~]# sort file      #默认按照ascii排序
AIX
HPUX
Linux
Linux
Solaris
Unix

  • 02. 对file文件排序,并移除重复项
[root@host ~]# cat file
Unix
Linux
Solaris
AIX
Linux
HPUX
[root@host ~]# sort -u file    #排除重复行
AIX
HPUX
Linux
Solaris
Unix
  • 03. 对file文件,按一般排序
[root@host ~]# cat file
20
19
5
49
200
[root@host ~]# sort file #一般排序
19
20
200
49
5
#注意是首字母1..10来排序,这一般不是我们想要的.
  • 04. 对file文件,按数字自然顺序来排序
[root@host ~]# cat file
20
19
5
49
200
#按数字自然顺序来排序
[root@host ~]# sort -n file
5
19
20
49
200
  • 05. 对file文件,按数字自然顺序倒排序
[root@host ~]# cat file
20
19
5
49
200
#按数字倒排序
[root@host ~]# sort -nr file
200
49
20
19
5
  • 06. 对file1,file2两个文件,按数字自然顺序倒排序,并移除其重复项
[root@host ~]# cat file1
20
19
5
49
200
[root@host ~]# cat file2
25
25
18
5
48
200

#按照自然顺序倒排序并移掉重复项
[root@host ~]# sort -nr -u file1 file2
200
49
48
25
20
19
18
5
  • 07. 对file文件,按月份来排序
[root@host ~]# cat file
Aug 8 30
Jan 1 31
Mar 3 31
Feb 2 28
May 5 30
Jul 7 31
Jun 6 30
[root@host ~]# sort -M file
Jan 1 31
Feb 2 28
Mar 3 31
May 5 30
Jun 6 30
Jul 7 31
Aug 8 30

  • 08. 对多域值文件file,按第一列来排序
[root@host ~]# cat file
Linux,20
Unix,30
AIX,25
Linux,25
Solaris,10
HPUX,100
# -t',' 以逗号分隔,也可以用""
# -k1,1 Form Field 1 to Field 1, 常用的用法,也就是按第一列排序
[root@host ~]# sort -t',' -k1,1 file
AIX,25
HPUX,100
Linux,20
Linux,25
Solaris,10
Unix,30
  • 09. 对多域值文件file,按第二列自然数字排序并移除重复行
[root@host ~]# cat file
Linux,20
Unix,30
AIX,25
Linux,25
Solaris,10
HPUX,100
#-k2n 第二列按自然数排序
[root@host ~]# sort -t"," -k2n,2 -u file
Solaris,10
Linux,20
AIX,25
Linux,25
Unix,30
HPUX,100
#Linux,25这一行就会被移除
  • 10. 对多域值文件file,先按第一列排序,再按第二列自然数字倒序排列
[root@host ~]# cat file
Linux,20
Unix,30
AIX,25
Linux,25
Solaris,10
HPUX,100
#-k 1,1 也可以分开来写
#-knr,2 也可以拆开来写 -k2,2 -nr
[root@host ~]# sort -t',' -k1,1 -k2nr,2 file
AIX,25
HPUX,100
Linux,25
Linux,20
Solaris,10
Unix,30
  • 11. 对多域值文件file,先按第一列排序,再按第三列自然数字倒序排列
[root@host ~]# cat file
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
#-t' ',默认是按空格,Tab键来排序,所以此处可以不要,只是为了好理解些
#-k 1.2,1.2 from 1 to 1,也就是按第一列来排序
#1.2表示第一列,第二个字符.  
#-k 3,3nr 第三列按自然数字倒序.注意其表现形式
[root@host ~] sort -t' ' -k 1.2,1.2 -k 3,3nr file
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000

Note:

  • 默认是TAB,空格排序,所以空格,或TAB键分割的,可以不用-t参数
  • -t:和-t‘:‘,-t":"都是一样的
  • sort -t: +1 -1 file #旧写法,能看懂就行了等同于sort -t":" -k1,1
  • -k1,1默认写法,即按第一列来排序 -k1.2,1.2按第一列第二个字符排序

Linux中sort命令

标签:linux

原文地址:http://blog.csdn.net/jerry_1126/article/details/39453329

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!