Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148603
  • 博文数量: 33
  • 博客积分: 1494
  • 博客等级: 上尉
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-24 21:50
文章分类

全部博文(33)

文章存档

2014年(1)

2013年(1)

2012年(2)

2011年(3)

2010年(26)

我的朋友

分类: LINUX

2014-01-29 12:56:40

让我们来看下面一个文件的内容,三列分别是编号、姓名、评分,以tab分隔
[renchangyan@mon0 temp]$ cat text  
101     James   98
120     Paul    91
110     Kobe    96
110     Kobe    96
119     YaoMing 85

1.最基本的需求,按照编号排序,从小到大
[renchangyan@mon0 temp]$ sort text  
101     James   98
110     Kobe    96
110     Kobe    96
119     YaoMing 85
120     Paul    91

2.若按照编号从大到小排序,则使用sort的-r选项
[renchangyan@mon0 temp]$ sort -r text 
120     Paul    91
119     YaoMing 85
110     Kobe    96
110     Kobe    96
101     James   98

3.去除重复行,使用sort的-u选项
[renchangyan@mon0 temp]$ sort -u text  
101     James   98
110     Kobe    96
119     YaoMing 85
120     Paul    91

4.现在我们加一行编号为99的,排序如下,发现99排在了最下面
[renchangyan@mon0 temp]$ sort text 
101     James   98
110     Kobe    96
110     Kobe    96
119     YaoMing 85
120     Paul    91
99      SunYue  80

为解决这个问题,我们需要使用-n选项,指定进行数字间的比较
[renchangyan@mon0 temp]$ sort -n text   
99      SunYue  80
101     James   98
110     Kobe    96
110     Kobe    96
119     YaoMing 85
120     Paul    91

5.若想按照第三列成绩排序,就需要用到sort的-t和-k选项了
[renchangyan@mon0 temp]$ sort -n -t $'\t' -k 3 text 
99      SunYue  80
119     YaoMing 85
120     Paul    91
110     Kobe    96
110     Kobe    96
101     James   98

6.sort默认是把结果输出到标准输出,如果你想把排序结果输出到原文件中,使用sort的-o选项就ok了
[renchangyan@mon0 temp]$ sort -n -t $'\t' -k 3 text -o text 
[renchangyan@mon0 temp]$ cat text 
99      SunYue  80
119     YaoMing 85
120     Paul    91
110     Kobe    96
110     Kobe    96
101     James   98

7.其他sort选项

-f会在排序的时候忽略大小写

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-M会以月份来排序,比如JAN小于FEB等等

-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较








阅读(730) | 评论(0) | 转发(0) |
0

上一篇:用加减法实现轮询(负载均衡时可用到)

下一篇:没有了

给主人留下些什么吧!~~