• 【linux】——linux sort用法大全


    1.sort(分类)用法

    sort命令选项很长,下面仅介绍各种选项。
    sort命令的一般格式为:

    sort -cmu -o output_file [other options] +pos1 +pos2 input_files

    下面简要介绍一下sort的参数:

    -c 测试文件是否已经分类。
    -m 合并两个分类文件。
    -u 删除所有复制行。
    -o 存储s o r t结果的输出文件名。


    其他选项有:
    -b 使用域进行分类时,忽略第一个空格。
    -n 指定分类是域上的数字分类。
    -t 域分隔符;用非空格或t a b键分隔域。
    -r 对分类次序或比较求逆。
    +n n为域号。使用此域号开始分类。
    -n  n为域号。使用此域号结束分类,一般与+n一起使用。
    n n为域号。在分类比较时忽略此域,一般与+n一起使用。

    post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。

    保存输出
    - o选项保存分类结果,然而也可以使用重定向方法保存。下面例子保存结果到results.out:
    $sort video >results.out

    2.例子说明
    =========================================
    下面是文件video的清单,包含了上个季度家电商场的租金情况。各域为:
    (1)名称,(2)供货区代码,(3)本季度租金,(4)本年租金。

    域分隔符为冒号,为此对此例需使用‘-t’选项。文件如下:
    [root@Linuxsvr lab]# cat video
    Boys in Company C       :HK     :192    :2192
    Alien                   :HK     :119    :1982
    The Hill                :KL     :63     :2972
    Aliens                  :HK     :532    :4892
    Star Wars            :HK     :301    :4102
    A Few Good Men :KL     :445    :5851
    Toy Story             :HK     :239    :3972

    =========================================

    3.启动方式
    缺省情况下,sort认为“一个空格”或“一系列空格”为“分隔符”。要加入其他方式分隔,使用-t(-t+分隔符)选项,如:
    [root@Linuxsvr lab]# sort -t: video
    A Few Good Men          :KL     :445    :5851
    Alien                   :HK     :119    :1982
    Aliens                  :HK     :532    :4892
    Boys in Company C       :HK     :192    :2192
    Star Wars               :HK     :301    :4102
    The Hill                :KL     :63     :2972
    Toy Story               :HK     :239    :3972

    以“:”为分隔符,按照第一列排序

    4.
    先查看是否为域分隔设置了- t选项,如果设置了- t选项,则使用分隔符将记录分隔成 域0、域1、域2、域3等等;
    如果未设置- t选项,用空格代替。
    缺省时sort以每行第一个字符将整个行排序,也可以指定域号,这样就会按照指定的域优先进行排序,
    如果指定的域有重复,会参考下一个域。

    sort对域的参照方式:
    关于sort的一个重要事实是它参照第一个域作为域0,域1是第二个域,等等。sort也可以使用整行作为分类依据。

    =========================================
    第一个域             第二个域 第三个域  第四个域
    域0                        域1        域2        域3
    Boys in Company C       :HK     :192    :2192
    Alien                   :HK     :119    :1982
    The Hill                :KL     :63     :2972
    Aliens                  :HK     :532    :4892
    Star Wars               :HK     :301    :4102
    A Few Good Men          :KL     :445    :5851
    Toy Story               :HK     :239    :3972

    =========================================

    文件是否已分类
    怎样分辨文件是否已分类?如果只有30行,看看就知道了,但如果是400行呢,使用sort -c查看sort文件是否按某种顺序分类。
    [root@Linuxsvr lab]# sort -c video
    sort: video:2: disorder: Alien                  :HK     :119    :1982
    结果显示未分类,现在将video分类,并存为2.video
    [root@Linuxsvr lab]# sort -t: video >2.video
    [root@Linuxsvr lab]# sort -c 2.video
    [root@Linuxsvr lab]#
    没有任何错误提示,返回提示符表明已分类。然而如果测试成功,返回一个信息行会更好。

    5.
    基本sort

    最基本的sort方式为sort filename,按第一域进行分类(分类键0)。实际上读文件时sort操作将行中各域进行比较,
    这里返回基于第一域sort的结果
    [root@Linuxsvr lab]# sort -t: video

    A Few Good Men          :KL     :445    :5851
    Alien                   :HK     :119    :1982
    Aliens                  :HK     :532    :4892
    Boys in Company C       :HK     :192    :2192
    Star Wars               :HK     :301    :4102
    The Hill                :KL     :63     :2972
    Toy Story               :HK     :239    :3972

    sort分类求逆
    如果要逆向sort结果,使用- r选项。在通读大的注册文件时,使用逆向sort很方便。下面是按域0分类的逆向结果。
    [root@Linuxsvr lab]# sort -t: -r video
    Toy Story               :HK     :239    :3972
    The Hill                :KL     :63     :2972
    Star Wars               :HK     :301    :4102
    Boys in Company C       :HK     :192    :2192
    Aliens                  :HK     :532    :4892
    Alien                   :HK     :119    :1982
    A Few Good Men          :KL     :445    :5851

    按指定域分类
    有时需要只按第2域(分类键1)分类。这里为重排 报文中“供应区代码”,使用t 1,意义为按分类键1分类。
    下面的例子中,所有供应区代码按分类键1分类;
    注意分类键2和3对应各域也被分类。因为第2域有重复,sort会再重复的情况下优先考虑下一个域的顺序。而且是按照第一个字符分类,并不是

    按照整个数值大小分类63小于445,却被排到后面,因为第一个字符是6,大于4。

    [root@Linuxsvr lab]# sort -t: +1 -1 video

    Alien                   :HK     :119    :1982
    Boys in Company C       :HK     :192    :2192
    Toy Story               :HK     :239    :3972
    Star Wars               :HK     :301    :4102
    Aliens                  :HK     :532    :4892
    A Few Good Men          :KL     :445    :5851
    The Hill                :KL     :63     :2972

    数值域分类
    依此类推,要按第三域(第二分类键)分类,使用t 2。但是因为这是数值域,即为数值分类,可以使用- n选项。下面例子为按季度租金分类命

    令及结果:
    [root@Linuxsvr lab]# sort -t: +2 -2n video

    The Hill                :KL     :63     :2972
    Alien                   :HK     :119    :1982
    Boys in Company C       :HK     :192    :2192
    Toy Story               :HK     :239    :3972
    Star Wars               :HK     :301    :4102
    A Few Good Men          :KL     :445    :5851
    Aliens                  :HK     :532    :4892
    使用-n选项是按照数值大小进行排列的,不使用-n选项是按照数字位排列,先看最左边第一位大小,如果第一位相同再看第二位大小

    如果不指定n,如下
    [root@Linuxsvr lab]# sort -t: +2 -2 video

    Alien                   :HK     :119    :1982
    Boys in Company C       :HK     :192    :2192
    Toy Story               :HK     :239    :3972
    Star Wars               :HK     :301    :4102
    A Few Good Men          :KL     :445    :5851
    Aliens                  :HK     :532    :4892
    The Hill                :KL     :63     :2972

    数值域倒序:

    [root@Linuxsvr lab]# sort -t: +2 -2nr video
    Aliens                  :HK     :532    :4892
    A Few Good Men          :KL     :445    :5851
    Star Wars               :HK     :301    :4102
    Toy Story               :HK     :239    :3972
    Boys in Company C       :HK     :192    :2192
    Alien                   :HK     :119    :1982
    The Hill                :KL     :63     :2972

    唯一性分类
    有时,原文件中有重复行,这时可以使用- u选项进行唯一性(不重复)分类以去除重复行,下例中A l i e n有相同的两行。带重复行的文件

    如下,其中A l i e n插入了两次:
    [root@Linuxsvr lab]# cat video
    Boys in Company C       :HK     :192    :2192
    Alien                   :HK     :119    :1982
    The Hill                :KL     :63     :2972
    Aliens                  :HK     :532    :4892
    Star Wars               :HK     :301    :4102
    A Few Good Men          :KL     :445    :5851
    Toy Story               :HK     :239    :3972
    Aliens                  :HK     :532    :4892

    使用- u选项去除重复行,不必加其他选项, sort会自动处理。
    [root@Linuxsvr lab]# sort -u video
    A Few Good Men          :KL     :445    :5851
    Alien                   :HK     :119    :1982
    Aliens                  :HK     :532    :4892
    Boys in Company C       :HK     :192    :2192
    Star Wars               :HK     :301    :4102
    The Hill                :KL     :63     :2972
    Toy Story               :HK     :239    :3972
    [root@Linuxsvr lab]# sort video
    A Few Good Men          :KL     :445    :5851
    Alien                   :HK     :119    :1982
    Aliens                  :HK     :532    :4892
    Aliens                  :HK     :532    :4892
    Boys in Company C       :HK     :192    :2192
    Star Wars               :HK     :301    :4102
    The Hill                :KL     :63     :2972
    Toy Story               :HK     :239    :3972

    使用k的其他sort方法
    sort还有另外一些方法指定分类键。可以指定k选项,第1域(分类键)以1开始。不要与前面相混淆。其他选项也可以使用k,主要用于指定分

    类域开始的字符数目。格式:
    -k  keydef
    The keydef argument is a restricted sort key field  definition. The format of this definition is:

    [root@Linuxsvr lab]# sort -t: -k[field_start[type][,field_end[type]]] video              

    [root@Linuxsvr lab]# sort -t: -k2,2 -k1,1 video
    Alien                   :HK     :119    :1982
    Aliens                  :HK     :532    :4892
    Aliens                  :HK     :532    :4892
    Boys in Company C       :HK     :192    :2192
    Star Wars               :HK     :301    :4102
    Toy Story               :HK     :239    :3972
    A Few Good Men          :KL     :445    :5851
    The Hill                :KL     :63     :2972

    如果不指定结束域,分类将会按照后面的域以次排序。如果上面的例子不指定-k2,2后面结束域,结果如下:
    [root@Linuxsvr lab]# sort -t: -k2 -k1,1 video
    Alien                   :HK     :119    :1982
    Boys in Company C       :HK     :192    :2192
    Toy Story               :HK     :239    :3972
    Star Wars               :HK     :301    :4102
    Aliens                  :HK     :532    :4892
    Aliens                  :HK     :532    :4892
    A Few Good Men          :KL     :445    :5851
    The Hill                :KL     :63     :2972
    上面的例子不会再以第一域排序,而是按照第二域排序,如果第二域有重复,优先考虑第三域,如果再有重复,考虑第四域,而不是第一域。


    用k做分类键排序
    可以指定分类键次序。再全部将结果反向排序,方法如下:
    [root@Linuxsvr lab]# sort -t: -k2,2 -k1,1 -r video
    The Hill                :KL     :63     :2972
    A Few Good Men          :KL     :445    :5851
    Toy Story               :HK     :239    :3972
    Star Wars               :HK     :301    :4102
    Boys in Company C       :HK     :192    :2192
    Aliens                  :HK     :532    :4892
    Aliens                  :HK     :532    :4892
    Alien                   :HK     :119    :1982
    [root@Linuxsvr lab]# sort -t: -k2,2 -k1,1 video
    Alien                   :HK     :119    :1982
    Aliens                  :HK     :532    :4892
    Aliens                  :HK     :532    :4892
    Boys in Company C       :HK     :192    :2192
    Star Wars               :HK     :301    :4102
    Toy Story               :HK     :239    :3972
    A Few Good Men          :KL     :445    :5851
    The Hill                :KL     :63     :2972

    下面的例子把Aliens改为Bliens,先对第三域反向排序,重复的地方再按照第一域正向排。
    [root@Linuxsvr lab]# sort -t: +2 -2nr -k1,1 video
    Aliens                  :HK     :532    :4892
    Bliens                  :HK     :532    :4892
    A Few Good Men          :KL     :445    :5851
    Star Wars               :HK     :301    :4102
    Toy Story               :HK     :239    :3972
    Boys in Company C       :HK     :192    :2192
    Alien                   :HK     :119    :1982
    The Hill                :KL     :63     :2972
    下面例子是先对第三域 正向排,重复的地方再按照第一域反向排
    [root@Linuxsvr lab]# sort -t: +2 -2n -k1,1 -r video
    The Hill                :KL     :63     :2972
    Alien                   :HK     :119    :1982
    Boys in Company C       :HK     :192    :2192
    Toy Story               :HK     :239    :3972
    Star Wars               :HK     :301    :4102
    A Few Good Men          :KL     :445    :5851
    Bliens                  :HK     :532    :4892
    Aliens                  :HK     :532    :4892

  • 相关阅读:
    数组小练习
    数组
    利用数组进行排序
    继承练习
    黄金分割点
    百万富翁-循环练习
    SelectedIndexChanged事件, SelectedValueChanged事件和SelectionChangeCommitted事件的区别及应用——c#
    进制转换以及与字符串之间转换——c#
    文件中的类都不能进行设计,因此未能为该文件显示设计器
    winfrom自绘窗体边框——c#
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/2837782.html
Copyright © 2020-2023  润新知