• 『忘了再学』Shell基础 — 31、字符处理相关命令


    1、排序命令sort

    (1)sort命令介绍

    sort命令可针对文本文件的内容,以行为单位来排序。

    命令格式如下:

    shell
    [root@localhost ~]# sort [选项] 文件名

    选项:

    • -f:忽略大小写。
    • -b:忽略每行前面的空白部分。
    • -n:以数值型进行排序,sort命令默认使用字符串型排序。
    • -r:反向排序。
    • -u:删除重复行。就是uniq命令。
    • -t:指定分隔符,sort命令默认的分隔符是制表符。
    • -k [n,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)。

    (2)练习

    以下练习默认文本内容如下:

    shell
    java    haha    3
    python  lala    77
    shell   dudu    23
    hello   world   12
    linxu   xixi    6

    1)示例1

    sort命令默认是用每行开头第一个字符来进行排序的。

    执行sort排序命令:

    shell
    # 默认按行首字符进行排序
    [root@localhost tmp]# sort test.txt
    hello   world   12
    java    haha    3
    linxu   xixi    6
    python  lala    77
    shell   dudu    23

    如果想要反向排序,请使用-r选项:

    shell
    # 反向排序
    [root@localhost tmp]# sort -r test.txt
    shell   dudu    23
    python  lala    77
    linxu   xixi    6
    java    haha    3
    hello   world   12

    2)示例2

    按照文档中,每行的指定字段进行排序。

    需要使用-k选项:

    shell
    # -k 2,2表示:指定按照第二个字段排序
    # 2,2表示第2个字段开始,到第2个字段结束
    [root@localhost tmp]# sort -k 2,2 test.txt
    shell   dudu    23
    java    haha    3
    python  lala    77
    hello   world   12
    linxu   xixi    6

    注意:文本中字段之间的分隔是制表符,默认识别。

    3)示例3

    按照数字进行排序,根据文本中的内容,我们需要按照第三列进行排序。

    shell
    [root@localhost tmp]# sort -k 3,3 test.txt
    hello   world   12
    shell   dudu    23
    java    haha    3
    linxu   xixi    6
    python  lala    77

    我们发现按照第三列内容进行排序的结果,有点不正确,3和6怎么排在12的后边了。

    是因为sort命令并没有把第三列的数据当作数字,默认是识别成字符串,所以是按照字符串的规则来排序的,也就是按第一位的数字进行排序的。

    我们需要添加sort命令的-n选项,就可以解决上述问题了。也就是让sort命令把第三列按数值进行排序。

    shell
    [root@localhost tmp]# sort -n -k 3,3 test.txt
    java    haha    3
    linxu   xixi    6
    hello   world   12
    shell   dudu    23
    python  lala    77

    4)示例4

    如果想要指定排序的字段,并且文本中字段间的分隔符不是制表符,这个时候就需要使用-t选项指定分隔符,并使用-k选项指定字段号。

    如下面文本:

    highlighter- apache
    java:haha:3
    python:lala:77
    shell:dudu:23
    hello:world:12
    linxu:xixi:6

    需求:按文本内容中的第三列数字进行排序。

    shell
    [root@localhost tmp]# sort -t ":" -n -k 3,3 test.txt
    java:haha:3
    linxu:xixi:6
    hello:world:12
    shell:dudu:23
    python:lala:77

    2、取消重复行命令uniq

    uniq命令是用来取消重复行的命令,其实和sort -u选项是一样的。

    命令格式如下:

    shell
    [root@localhost ~]# uniq [选项] 文件名
    
    选项:
        -i:忽略大小写。

    练习:

    student.txt文本内容如下:

    highlighter- apache
    ID      Name    Python  Linux   MySQL   Java
    1       Tangs   88      87      86      85.55
    2       Sunwk   99      98      97      96.66
    2       Sunwk   99      98      97      96.66
    3       Zhubj   77      76      75      74.44
    3       Zhubj   77      76      75      74.44
    4       Shahs   66      65      64      63.33
    4       Shahs   66      65      64      63.33

    我们可以看到student.txt文本的ID为2、3、4的信息有重复。

    使用uniq命令删除重复的行后,有如下输出结果:

    shell
    [root@localhost tmp]# uniq student.txt
    ID      Name    Python  Linux   MySQL   Java
    1       Tangs   88      87      86      85.55
    2       Sunwk   99      98      97      96.66
    3       Zhubj   77      76      75      74.44
    4       Shahs   66      65      64      63.33

    更多参考可以查看:https://www.runoob.com/linux/linux-comm-uniq.html

    3、统计命令wc

    wc命令是统计文档中行数,字符数,字节数等信息。

    命令格式如下:

    shell
    [root@localhost ~]# wc [选项] 文件名
    选项:
        -l:只统计行数
        -w:只统计单词数
        -m:只统计字符数

    练习1:

    在默认的情况下,wc命令将计算指定文件的行数、字数,以及字节数。

    shell
    # 行数为5、单词数30、字节数124
    [root@localhost tmp]# wc student.txt
      5  30 124 student.txt

    练习2:

    查看特定的统计信息,只看行数和字节数。

    shell
    # 行数为5、字节数124
    [root@localhost tmp]# wc -lm student.txt
      5 124 student.txt

    练习3:

    同时查看多个文件的统计信息。

    shell
    [root@localhost tmp]# wc student.txt test2.txt
      5  30 124 student.txt
      8  37 318 test2.txt
     13  67 442 总用量

    更多参看可以查看:https://www.runoob.com/linux/linux-comm-wc.html


    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16373842.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Redis资料整理
    nodejs毕业设计拼车租车平台
    linux环境下统计目录下所有文件的行数
    I2C相关实验
    用户角色权限、按钮控制功表及返回数据格式
    Java学习笔记(三十)
    表单的语法及属性(form)
    [附源码]计算机毕业设计JAVA大学教师年终考核管理信息系统
    【PAT甲级 - C++题解】1013 Battle Over Cities
    Hadoop----Hive的使用
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16373842.html