zoukankan      html  css  js  c++  java
  • sort

    1.语法


    语法:

      排序,影响输出次序,不会改变原文件内容。默认按照 ASCII 表顺序进行排序。默认情况下,空格作为字段分隔符。

      sort命令有三种工作模式:排序(默认)、合并、检查排序状态。

    选项:

      

     
    选项说明
    -c
    测试文件是否已经排序;有输出、有返回值(没有排序,返回1)
    -C
    无输出,仅返回(0已排序、1未排序)
    -m
     

     

    “排序选项”列表
    选项说明

    -b

    比较时使用第一个非空字符
    -d

    字典排序

    排序时,忽略数字、字母、空格之外的其他字符,……

    -f
    把小写字母变成大写
    -M
    排序月份(jan、feb……dec)
    -h
    人性化显示(e.g., 2K 1G)
    -n
    按字串的数值序列排序
    -r
    降序排列(默认,升序)
    -V
    自然顺序(不是完全按照ascii表.,字母按其拍完,特殊字符继续按其排)
    “其他选项”列表
    选项说明
    -k 定义排序关键字”
    -o
    排序结果写入文件
    -t
    指定列分隔符(字段分割符,默认:空白符)
    -u
    删除重复的行

     

    2.实例


    2.1.排序列

      先看难以理解的k,简单用法如下:

    #效果很明显
    [view@tri ~]$ sort -k 1 sort.txt a 9 d 3 x 5 [view@tri ~]$ sort -k 2 sort.txt d 3 x 5 a 9

     

      k的语法格式:F[.C][OPTS][,F[.C][OPTS]]

      看起来蛮复杂,还是有规律可循,逗号前后有两部分,这么一看语法含义很明显了。F.C表示某列起始到某个字符位置(均从1开始算起首个非空白符),OPTS为一个或多个序列选项(bdfgiMhnRrV)。不使用k选项,默认k为整行。

    第二列,数字降序
    [view@tri ~]$ sort -k 2nr sort.txt
    ntp      24831  0.0  0.1  29420  2012 ?        Ss   Aug24   0:04 /usr/sbin/ntpd -u ntp:ntp -g
    root     24490  0.0  0.3 105480  3760 ?        Ss   Aug24   0:00 /usr/sbin/sshd -D
    polkitd  24411  0.0  1.1 527516 11776 ?        Ssl  Aug24   0:02 /usr/lib/polkit-1/polkitd --no-debug
    work     22107  0.0  0.1 151056  1832 pts/0    R+   12:39   0:00 ps aux
    work     21572  0.0  0.2 115516  2228 pts/1    Ss+  10:44   0:00 -bash
    root      9764  0.0  0.1  74488  1592 ?        Ss   Aug22   0:32 /usr/local/httpd-2.4.6/bin/httpd -k start
    apache    1382  0.0  0.2  74624  2488 ?        S    Aug25   0:00 /usr/local/httpd-2.4.6/bin/httpd -k start
    root       465  0.0  0.0  23768   704 ?        Ss   Jun30   0:00 /usr/sbin/atd -f
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    
    第二列,降序(默认从列的首个非空字符ascii升序排列)
    [view@tri ~]$ sort -k 2r sort.txt
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root      9764  0.0  0.1  74488  1592 ?        Ss   Aug22   0:32 /usr/local/httpd-2.4.6/bin/httpd -k start
    root       465  0.0  0.0  23768   704 ?        Ss   Jun30   0:00 /usr/sbin/atd -f
    ntp      24831  0.0  0.1  29420  2012 ?        Ss   Aug24   0:04 /usr/sbin/ntpd -u ntp:ntp -g
    root     24490  0.0  0.3 105480  3760 ?        Ss   Aug24   0:00 /usr/sbin/sshd -D
    polkitd  24411  0.0  1.1 527516 11776 ?        Ssl  Aug24   0:02 /usr/lib/polkit-1/polkitd --no-debug
    work     22107  0.0  0.1 151056  1832 pts/0    R+   12:39   0:00 ps aux
    work     21572  0.0  0.2 115516  2228 pts/1    Ss+  10:44   0:00 -bash
    apache    1382  0.0  0.2  74624  2488 ?        S    Aug25   0:00 /usr/local/httpd-2.4.6/bin/httpd -k start
    
    按照日期排序(升序)
    [view@tri ~]$ sort -k 9M sort.txt
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    work     21572  0.0  0.2 115516  2228 pts/1    Ss+  10:44   0:00 -bash
    work     22107  0.0  0.1 151056  1832 pts/0    R+   12:39   0:00 ps aux
    root       465  0.0  0.0  23768   704 ?        Ss   Jun30   0:00 /usr/sbin/atd -f
    apache    1382  0.0  0.2  74624  2488 ?        S    Aug25   0:00 /usr/local/httpd-2.4.6/bin/httpd -k start
    ntp      24831  0.0  0.1  29420  2012 ?        Ss   Aug24   0:04 /usr/sbin/ntpd -u ntp:ntp -g
    polkitd  24411  0.0  1.1 527516 11776 ?        Ssl  Aug24   0:02 /usr/lib/polkit-1/polkitd --no-debug
    root     24490  0.0  0.3 105480  3760 ?        Ss   Aug24   0:00 /usr/sbin/sshd -D
    root      9764  0.0  0.1  74488  1592 ?        Ss   Aug22   0:32 /usr/local/httpd-2.4.6/bin/httpd -k start

    2.2.列分割标记

      以冒号为分隔符,对第2列降序排列

    [view@tri ~]$ sort -t: -rnk 2 sort.txt
    1.32:    21:    2:8453434k
    0.22:    20:    2:64543543k
    0.98:    14:    1:54355k

    2.3.排序

      判断给定文件,是否已经排序。排序后的文件返回值,为0。

    首列是排过序的,返回应该是0
    [view@tri ~]$ sort -c sort.txt
    [work@tri ~]$ echo $?
    0
    [work@tri ~]$ sort -C sort.txt
    [work@tri ~]$ echo $?
    0
    第二列,是没有排序的,返回是1
    [work@tri ~]$ sort -c -k 2 sort.txt
    sort: sort.txt:3: disorder: 5 2
    [work@tri ~]$ echo $?
    1
    [work@tri ~]$ sort -C -k 2 sort.txt
    [work@tri ~]$ echo $?
    1

      排序时,重复行、大小写的问题

    u选项排除相同行
    [work@tri ~]$ sort sort.txt -u
    hello
    Hello
    f选项认为小写字母等于大写字母(ASCII)
    [work@tri ~]$ sort sort.txt -fu
    Hello

    2.4.合并

      合并两个相同格式不同内容的文件

    $ sort access-2015*.log
    $ sort -u access-2015*.log > access-2015.log

      合并两个相同格式不同内容的文件

    [view@tri ~]$ sort sort.txt
    0.22
    0.22
    0.98
    0.98
    0.98
    1.32
    1.32
    [view@tri ~]$ sort -u  sort.txt
    0.22
    0.98
    1.32
    一切代码都是为了生活,一切生活都是调剂
  • 相关阅读:
    对开发者有用的英文网站合集
    比较全的OA系统功能模块列表
    OA系统权限管理设计方案
    OA系统启动:基础数据,工作流设计
    JS生成UUID
    java类过滤器,防止页面SQL注入
    Restful安全认证及权限的解决方案
    把表单转成json,并且name为key,value为值
    JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
    Jquery 获取第一个子元素
  • 原文地址:https://www.cnblogs.com/argor/p/7918691.html
Copyright © 2011-2022 走看看