zoukankan      html  css  js  c++  java
  • Shell学习(七)——sort、uniq、cut、wc命令详解

    Shell学习(七)——sort、uniq、cut、wc命令详解
    转自:[1]linux sort,uniq,cut,wc命令详解 https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858385.html

    一、sort命令
    转自:
    [1]Linux sort命令 https://www.runoob.com/linux/linux-comm-sort.html
    [2]sort命令详解 https://www.cnblogs.com/machangwei-8/p/9570937.html
    1、命令格式

    sort [选项] [文件]
    

    2、Sort命令常用参数

    短参数	长参数	                 说明
    -n	– number-sort	         按字符串数值排序,与-g区别为不转为浮点数
    -g	–general-number-sort	 按通用数值排序,支持科学计数法
    -f	–ignore-case	         忽略大小写,默认大小写字母不同
    -k	–key=POS1[,POS2]	     排序从POS1开始,若指定POS2,则POS2结束,否则以pos1排序
    -t	–field-separator=SEP	 指定列的分割符
    -r	–reverse	             降序排序,默认为升序
    -h	–human-numeric-sort	     使用易读性数字(例如: 2K 1G)
    -u	–unique	                 去除重复的行
    -o	–output=FILE	         将输出写入文件
    

    3、常用用法举例

    (1)默认排序
    默认情况下,sort命令,以字母序进行文本排序。如下:
    
    shuanghu@shuanghu:tmp$cat word.txt
    one
    two 
    three
    four
    
    shuanghu@shuanghu:tmp$sort word.txt
    four
    one
    three
    two
    (2)数字排序
    如果想对数字进行排序,可以使用-n参数
    
    shuanghu@shuanghu:tmp$ cat num.txt 
    100
    20
    3
    shuanghu@shuanghu:tmp$ sort num.txt -n
    3
    20
    100
    (3)指定排序
    sort排序的时候,可以按字段分割的数据进行排序。-t参数表示行的分割字符,-k表示第几列。当然,可以进行降序排序,-r参数可以实现。
    下面是对passwd文件,以冒号(:)进行分割,然后对第三列以数字方式进行降序排序。
    
    shuanghu@shuanghu:etc$ cat passwd 
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    shuanghu@shuanghu:etc$ sort -t ':' -k 3 -nr passwd 
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    (4)文件夹大小排序
    在du的时候,加上-h可以使用易读性数字,比如2k,1g,3M这种。sort也支持-h参数。
    比如,du一个文件夹下的目录大小后,想以文件大小进行排序。由于du -h的结果是3k,2M,1G这种,不能简单的按数字排序。所以,可以使用-h参数。具体如下:
    
    shuanghu@shuanghu:tmp$ du -h
    2.0G    ./test2
    4.0K    ./test3
    316M    ./test
    2.3G    .
    shuanghu@shuanghu:tmp$ du -h |sort -hr
    2.3G    .
    2.0G    ./test2
    316M    ./test
    4.0K    ./test3
    (5)系统进程内存占用排序
    查看系统进程中,内存占用最多的前5个进程信息
    
    shuanghu@shuanghu:tmp$ ps aux|sort -gr -k 4|head -n 5
    shuanghu  1740 15.7  4.6 1506764 189872 ?      Sl    5月07 142:08 compiz
    root      1304  2.1  1.9 338928 80208 tty7     Ssl+  5月07  19:29 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
    shuanghu  1933  0.0  1.1 1074520 46708 ?       Sl    5月07   0:00 /usr/lib/evolution/evolution-calendar-factory
    shuanghu  1833  0.0  0.8 974900 34468 ?        Sl    5月07   0:01 nautilus -n
    shuanghu  2111  0.0  0.6 655712 24920 ?        Sl    5月07   0:16 gnome-terminal
    (6)对文件内容去重排序
    如果文件内容有很多重复的,需要进行去重。sort也是支持的,可以通过-u参数使用
    
    shuanghu@shuanghu:tmp$cat word.txt
    one
    two
    two
    three
    three
    three
    four
    four
    four
    
    shuanghu@shuanghu:tmp$sort -u word.txt
    four
    one
    three
    two
    (7)将sort输出内容写入文件
    在shell中,一般将控制台内容写入文件,可以使用重定向,但如果想把sort的排序内容写回文件,则不能使用重定向。则需要-o参数。具体如下:
    
    shuanghu@shuanghu:tmp$cat word.txt
    one
    two 
    three
    four
    shuanghu@shuanghu:tmp$sort word.txt > word.txt
    shuanghu@shuanghu:tmp$cat word.txt #输出为空
    
    shuanghu@shuanghu:tmp$sort word.txt -o word.txt
    shuanghu@shuanghu:tmp$sort -u word.txt
    four
    one
    three
    two
    

    二、uniq命令
    [1]Linux uniq 命令 https://www.runoob.com/linux/linux-comm-uniq.html
    [2]Linux uniq命令详解 https://www.cnblogs.com/ftl1012/p/uniq.html
    1、命令格式

    uniq [选项] [文件]
    

    2、uniq命令常用参数

    从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。
    不附加任何选项时匹配行将在首次出现处被合并。
      -c, --count           在每行前加上表示相应行目出现次数的前缀编号
      -d, --repeated        只输出重复的行
      -D, --all-repeated[=delimit-method    显示所有重复的行
                            delimit-method={none(default),prepend,separate}
                            以空行为界限
      -f, --skip-fields=N   比较时跳过前N列
      -i, --ignore-case     在比较的时候不区分大小写
      -s, --skip-chars=N    比较时跳过前N个字符
      -u, --unique          只显示唯一的行
      -z, --zero-terminated 使用''作为行结束符,而不是新换行
      -w, --check-chars=N   对每行第N个字符以后的内容不作对照
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出
     
    若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过。
     
    提示:uniq 不会检查重复的行,除非它们是相邻的行。
    如果您想先对输入排序,使用没有uniq 的"sort -u"。
    

    3、常用用法举例

    testfile的内容如下
    
    cat testfile
    hello
    world
    friend
    hello
    world
    hello
     
    
    直接删除未经排序的文件,将会发现没有任何行被删除
    
    #uniq testfile  
    hello
    world
    friend
    hello
    world
    hello
     
    
    排序文件,默认是去重
    
    #cat words | sort |uniq
    friend
    hello
    world
     
    
    排序之后删除了重复行,同时在行首位置输出该行重复的次数
    
    #sort testfile | uniq -c
    1 friend
    3 hello
    2 world
     
    
    仅显示存在重复的行,并在行首显示该行重复的次数
    
    #sort testfile | uniq -dc
    3 hello
    2 world
     
    
    仅显示不重复的行
    
    sort testfile | uniq -u
    friend  
    

    三、cut命令
    [1]Linux下的cut选取命令详解 https://www.cnblogs.com/longjshz/p/5792502.html
    1、命令格式

    cut [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]
    

    2、常用参数

    使用说明
    cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
    如果不指定 File参数,cut命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
    -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    -c :以字符为单位进行分割。
    -d :自定义分隔符,默认为制表符。
    -f  :与-d一起使用,指定显示哪个区域。
    -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。
    

    3、常用用法举例

    (1)cut -b
    [root@master etc]# who|cut -b 3-5,8
    okee
    okee
    “字节”定位中,提取第3,第4、第5和第8个字节,-b支持形如3-5的写法,而且多个定位之间用逗号隔开
    注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。
    [root@master etc]# who|cut -b 9,3-5
    oker
    oker
    同时还可以用-3表示从第一个字节到第三个字节,而3-表示从第三个字节到行尾
    [root@master etc]# who|cut -b -3
    zoo
    zoo
    [root@master etc]# who|cut -b 3-
    okeeper pts/0        2016-08-20 20:04 (192.168.184.1)
    okeeper pts/2        2016-08-18 19:25 (192.168.184.1)
    这两种情况下,都是选中第三个字节,同时出现-3,3-也不会出现重复
    [root@master etc]# who|cut -b 3-,-3
    zookeeper pts/0        2016-08-20 20:04 (192.168.184.1)
    zookeeper pts/2        2016-08-18 19:25 (192.168.184.1)
    (2)cut -c
    -b是字节,-c则是字符,注意一点就是:一个空格算一个字节,一个汉字算三个字节
    [rocrocket@rocrocket programming]$ cat cut_ch.txt
    星期一
    星期二
    星期三
    星期四
    [rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt
    �
    �
    �
    �
    [rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt
    一
    二
    三
    四
    [rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2
    �
    �
    �
    �
    [rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2  --当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开
    [rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3  --当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开
    星 
    星 
    星 
    星
    (3)cut -d -f
    [root@master etc]# cat /etc/passwd |head -n 5
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@master etc]# cat /etc/passwd|head -n 5|cut -d : -f 1
    root
    bin
    daemon
    adm
    lp
    [root@master etc]# cat /etc/passwd|head -n 5|cut -d : -f 1,3-5
    root:0:0:root
    bin:1:1:bin
    daemon:2:2:daemon
    adm:3:4:adm
    lp:4:7:lp
    

    四、wc命令
    [1]linux之wc命令详解 https://www.cnblogs.com/iloveyouforever/p/4014332.html
    1、命令格式

    wc [options] 文件
    

    2、常用参数

    统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。
    wc同时也给出所指定文件的总统计数。
    -c  统计字节数
    -l    统计行数
    -m    统计字符数。这个参数不能与 -c 参数一起使用。
    -w    统计字数。一个字被定义为空白、跳格或换行字符分隔的字符串。
    -L    打印最长行的长度
    --help  显示帮助信息
    --version 显示版本信息
    

    3、常用用法举例

  • 相关阅读:
    设计模式:访问者模式
    设计模式:解释器模式
    设计模式:享元模式
    设计模式:中介者模式
    设计模式:职责链模式
    设计模式:命令模式
    设计模式:桥接模式
    设计模式:单例模式
    设计模式:迭代器模式
    设计模式:组合模式
  • 原文地址:https://www.cnblogs.com/shujk/p/13580617.html
Copyright © 2011-2022 走看看