让我们来看下面一个文件的内容,三列分别是编号、姓名、评分,以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会忽略每一行前面的所有空白部分,从第一个可见字符开始比较
阅读(754) | 评论(0) | 转发(0) |