• Sort命令的用法


    Sort命令的用法
    s o r t
    命令选项很长,下面仅介绍各种选项。

    选项
    s o r t
    命令的一般格式为:

    [Copy to clipboard] [ - ]

    CODE:

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


    下面简要介绍一下s o r t的参数:

    QUOTE:

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


    其他选项有:

    QUOTE:

    -b 使用域进行分类时,忽略第一个空格。
    -n
    指定分类是域上的数字分类。
    -t
    域分隔符;用非空格或t a b键分隔域。
    -r
    对分类次序或比较求逆。
    +n n
    为域号。使用此域号开始分类。
    n n
    为域号。在分类比较时忽略此域,一般与+ n一起使用。
    post1
    传递到mnm为域号,n为开始分类字符数;例如46意即以第5域分类,从第7个字符开始。


    保存输出
    - o
    选项保存分类结果,然而也可以使用重定向方法保存。下面例子保存结果到r e s u l t s . o u t

    [Copy to clipboard] [ - ]

    CODE:

    $sort video.txt >results.out


    启动方式
    缺省情况下, s o r t认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用- ts o r t执行时,先查看是否为域分隔设置了- t选项,如果设置了,则使用它来将记录分隔成域0、域1等等
    ;如果未设置,用空格代替。缺省时s o r t将整个行排序,指定域号的情况例外。

    下面是文件v i d e o . t x t的清单,包含了上个季度家电商场的租金情况。各域为:(1)名称,(2)供货区代码,(3)本季度租金,(4)本年租金。域分隔符为冒号。为此对此例需使用‘ - t’选项。文件如下:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@chenwy sam]$ cat video.txt
    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


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

    文件是否已分类
    怎样分辨文件是否已分类?如果只有3 0行,看看就知道了,但如果是4 0 0行呢,使用s o r t - c通知s o r t文件是否按某种顺序分类。

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -c video.txt
    sort: video.txt:2: disorder: Alien:HK:119:1982


    结果显示未分类,

    现在将之分类,再试一次:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t:  video.txt >video2.txt
    [sam@Linux_chenwy sam]$ sort -c video2.txt
    [sam@Linux_chenwy sam]$


    返回提示符表明已分类。然而如果测试成功,返回一个信息行会更好。


    基本sort
    最基本的s o r t方式为sort filename,按第一域进行分类(分类键0)。实际上读文件时s o r t操作将行中各域进行比较,这里返回基于第一域s o r t的结果

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: video.txt
    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
    分类求逆
    如果要逆向s o r t结果,使用- r选项。在通读大的注册文件时,使用逆向s o r t很方便。下面是按域0分类的逆向结果。

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: -r video.txt
    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分类;注意分类键23对应各域也被分类。

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: +1 video.txt
    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


    前几个第二域都是HK,第三域:119,192,301,489,532,63,按第一个数字分了,因此必须指定多域及数值域

    数值域分类
    依此类推,要按第三分类键分类,使用t 3。但是因为这是数值域,即为数值分类,可以使用- n选项。下面例子为按年租金分类命令及结果:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: +3n video.txt
    Alien:HK:119:1982
    Boys in Company C:HK:192:2192
    The Hill:KL:63:2972
    Toy Story:HK:239:3972
    Star Wars:HK:301:4102
    Aliens:HK:532:4892
    A Few Good Men:KL:445:5851


    如果不指定n,如下

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: +2 video.txt
    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


    o r t
    只查看第3域每个数值的第一个数,并按其分类,然后再按第二个数依次下去。

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: +2n video.txt
    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


    数值域倒序:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: +2nr video.txt
    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插入了两次:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ echo "Aliens:HK:532:4892" >> video.txt
    [sam@Linux_chenwy sam]$ cat video.txt
    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选项去除重复行,不必加其他选项, s o r t会自动处理。

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -u video.txt
    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


    使用k的其他sort方法
    s o r t
    还有另外一些方法指定分类键。可以指定k选项,第1域(分类键)以1开始。不要与前面相混淆。其他选项也可以使用k,主要用于指定分类域开始的字符数目。
    使用- k 4,按年租金分类的次序。

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: -k4 video.txt
    A alien:HK:119:1982
    Alien:HK:119:1982
    Boys in Company C:HK:192:2192
    A the Hill:KL:63:2972
    The Hill:KL:63:2972
    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


    k做分类键排序
    可以指定分类键次序。先以第4域,再以第1域分类,命令为-k4 -k1,也可以反过来,以便在文件首行显示最高年租金,方法如下:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: -k4 -k1  video.txt
    AAlien:HK:119:1982
    Alien:HK:119:1982
    Boys in Company C:HK:192:2192
    The Hill:KL:63:2972
    Toy Story:HK:239:3972
    Star Wars:HK:301:4102
    Aliens:HK:532:4892
    A Few Good Men:KL:445:5851



    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: -k4 -k1 -r  video.txt
    A Few Good Men:KL:445:5851
    Aliens:HK:532:4892
    Star Wars:HK:301:4102
    Toy Story:HK:239:3972
    The Hill:KL:63:2972
    Boys in Company C:HK:192:2192
    Alien:HK:119:1982
    AAlien:HK:119:1982


    这里-r是对第四域反排序?

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: -k1  video.txt
    AAlien:HK:119:1982
    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



    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: -k1 -k4  video.txt
    AAlien:HK:119:1982
    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



    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t: -k1 -k4 -r  video.txt
    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
    AAlien:HK:119:1982


    对第一域进行反排序?

    换成第3

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t:  +2nr -k1 -r  video.txt
    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
    AAlien:HK:119:1982
    The Hill:KL:63:2972


    对第三域进行倒序,再对第一域排序,最后把第一域倒序?

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort -t:  +2nr -k1  video.txt
    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
    AAlien:HK:119:1982
    Alien:HK:119:1982
    The Hill:KL:63:2972


    指定sort序列
    可以指定分类键顺序,也可以使用- n选项指定不使用哪个分类键进行查询。看下面的s o r t命令:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@Linux_chenwy sam]$ sort +0 -2 +3 video.txt


    该命令意即开始以域0分类,忽略域2,然后再使用域3分类。


    pos用法
    指定开始分类的域位置的另一种方法是使用如下格式:

    [Copy to clipboard] [ - ]

    CODE:

    sort +field_number.characters_in


    意即从f i e l d _ n u m b e r开始分类,但是要在此域的第c h a r a c t e r s _ i n个字符开始。

    如:

    [Copy to clipboard] [ - ]

    CODE:

    [sam@chenwy sam]$ cat video.txt
    Boys in Company C:HK48:192:2192
    Alien:HK57:119:1982
    The Hill:KL223:63:2972
    Aliens:HK11:532:4892
    Star Wars:HK38:301:4102
    A Few Good Men:KL87:445:5851
    Toy Story:HK65:239:3972


    要只使用供应区代码后缀部分将文件分类,其命令为+ 1 . 2,意即以第1域最左边第3个字符开始分类

    [Copy to clipboard] [ - ]

    CODE:

    [sam@chenwy sam]$ sort -t: +1.2 video.txt
    Aliens:HK11:532:4892
    The Hill:KL223:63:2972
    Star Wars:HK38:301:4102
    Boys in Company C:HK48:192:2192
    Alien:HK57:119:1982
    Toy Story:HK65:239:3972
    A Few Good Men:KL87:445:5851


    比较一下加n,呵呵,其实区码并不需要加n

    [Copy to clipboard] [ - ]

    CODE:

    [sam@chenwy sam]$ sort -t: +1.2n video.txt
    Aliens:HK11:532:4892
    Star Wars:HK38:301:4102
    Boys in Company C:HK48:192:2192
    Alien:HK57:119:1982
    Toy Story:HK65:239:3972
    A Few Good Men:KL87:445:5851

     

     

  • 相关阅读:
    Android ImageView 的scaleType 属性图解
    Android 颜色透明度换算
    Android动态控制状态栏显示和隐藏
    xutils Error:(37, 39) 错误: 无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase的类文件
    Android学习笔记————利用JDBC连接服务器数据库
    android权限(permission)大全
    as无法在vivo上安装程序解决
    Android Menu用法全面讲解
    Android Studio gradle配置详解
    各种面试题(二)
  • 原文地址:https://www.cnblogs.com/feihongwuhen/p/7170983.html
Copyright © 2020-2023  润新知