Linux 命令(Sort)

上一篇 / 下一篇  2015-09-25 15:08:17 / 个人分类:Linux

1)sort工作原理

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

一般格式:sort [选项]文件列表

选项含义:

 -m:如果文件列表中的文件已经排好序,则对这些文件统一进行合并,不做排序。

-n:使用数值来排序(比如:文件有102,默认排序102小,如果使用–n则会正常)

 -r:逆序排序

 -o:文件排序输出放到该文件名所指定的文件中。如果该文件不存在,则创建一新文件。

sort  -r java -o  java2

-u:去除重复行

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

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

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

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

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

有时候学习脚本,你会发现sort命令后面跟了一堆类似-k1,2,或者-k1.2 -k3.4的东东,有些匪夷所思。今天,我们就来搞定它—-k选项!

 -k:指定列排序

如果有一个文件的内容是这样:

[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。

那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?

幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。

[rocrocket@rocrocket programming]$ sort -n -k2 -t : paixu

注意-t后面使用冒号+文件名

有时候学习脚本,你会发现sort命令后面跟了一堆类似-k1,2,或者-k1.2 -k3.4的东东

1准备素材

$ cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500

第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资

1)以公司昵称进行排序:sort -t ' ' -k1 paixu【单引号中间有空格】

2)以公司人数进行排序:sort -t ' ' -k2 paixu

3)以公司人数进行排序,人数相同的按照员工平均工资进行升序排序:sort -n -t ' ' -k2 -k3 paixu

4)以公司平均工资进行降序进行排序,如果员工人数相同的,则按照公司人数升序排序

sort -n -t ' '  -k3r -k2 paixu或者sort -t ' ' -k3nr -k2n paixu

5)从公司英文名称第二个字母进行排序:sort -t ' ' -k1.2 paixu


TAG: Linux

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-04  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 5372
  • 日志数: 8
  • 建立时间: 2009-11-20
  • 更新时间: 2015-09-25

RSS订阅

Open Toolbar