• 『忘了再学』Shell基础 — 26、cut列提取命令


    1、cut命令说明

    cut命令的作用是对文本中的内容进行截取。

    一个文件里边有很多数据,grep命令是用来提取文本内容包含匹配规则的行,而cut命令是用来截取文本内容中的列数据。

    shell
    [root@localhost ~]# cut [选项] 文件名
    
    选项:
      -f 列号:提取第几列。
      -d 分隔符:按照指定分隔符分割列,默认分隔符是制表符(tab键)。
      -c 字符范围:不依赖分隔符来区分列,而是通过字符范围(行首为0)来进行字段提取。
            “n-”表示截取所有行从第n个字符到行尾;
            “n-m”表示截取所有行从第n个字符到第m个字符;
            “-m”表示截取所有行从第1个字符到第m个字符。

    2、cut命令练习

    使用如下文本:

    highlighter- apache
    ID      Name    Gender  Mark
    1       Tangs   M       88
    2       Sunwk   M       99
    3       Zhubj   M       77
    4       Shahs   M       66

    (1)cut命令基本用法

    使用cut命令提取student.txt文本中的第二列信息。

    shell
    # 提取文本中第二列内容
    [root@localhost tmp]# cut -f 2 student.txt
    Name
    Tangs
    Sunwk
    Zhubj
    Shahs
    

    如果只需要第二列信息,且不需要标题,就需要结合前边说的grep命令一起使用了。

    shell
    [root@localhost tmp]# grep -v "Name" student.txt | cut -f 2
    Tangs
    Sunwk
    Zhubj
    Shahs

    (2)cut命令选取多列

    如果想要提取文本中多列数据,只要将列号直接用,(逗号)分开即可,命令如下:

    shell
    [root@localhost tmp]# cut -f 2,4 student.txt
    Name    Mark
    Tangs   88
    Sunwk   99
    Zhubj   77
    Shahs   66

    (3)按字符来进行提取

    cut命令可以按照字符进行提取,需要注意8-代表的是提取所有行的第十个字符开始到行尾,而
    10-20代表提取所有行的第10个字符到第20个字符,而-8代表提取所有行从行首到第8个字符。

    shell
    [root@localhost tmp]# cut -c -6 student.txt
    ID  Nam
    1   Tang
    2   Sunw
    3   Zh
    4   Shah
    

    注意:在实际工作中,这种方式很难提取出合理的数据信息,除非格式非常的规律,因为每行的字符个数不相等,截取出来的内容会不完整。

    (4)按指定分隔符进行截取数据

    例如:以:作为分隔符,提取/etc/passwd文件中,普通用户的第一列和第三列数据信息。

    需要先过滤掉伪用户和root用户,在切割提取。

    shell
    # 过滤伪用户
    # grep "/bin/bash" /etc/passwd
    
    # 过滤root用户
    # grep -v "root" /etc/passwd
    
    # 执行命令
    [root@localhost tmp]# grep "/bin/bash" /etc/passwd | grep -v "root" | cut -d ":" -f 1,3
    user1:500
    user2:501
    

    之后我们就可以把这些提取出来的数据,传入变量中,然后该变量就可以在程序中进行操作了。

    3、cut命令分隔符说明

    cut命令默认分隔符是制表符(tab键),而不是使用空格来进行分隔,因为cut命令不识别空格作为分隔符。

    如果有特定的符号,也是可以用-d选项进行指定做为分隔符。

    而空格不推荐作为cut命令的分隔符。

    如查看磁盘情况的df命令:

    shell
    [root@192 localhost]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        19G  2.1G   16G  12% /
    tmpfs           491M     0  491M   0% /dev/shm
    /dev/sda1       240M   34M  194M  15% /boot

    这个命令中间的分隔就是空格。

    如我们通过cut命令获取二列信息,如下:

    shell
    [root@192 localhost]# df -h | cut -f 2
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        19G  2.1G   16G  12% /
    tmpfs           491M     0  491M   0% /dev/shm
    /dev/sda1       240M   34M  194M  15% /boot

    我们看到cut命令默认是不识别空格作为分隔符的。

    如果我们用-d选项指定空格作为分隔符,如下:

    可以看到获取的是一列空格,也非常的不好用。

    所以不推荐空格作为cut命令的分隔符。

    总结一下:

    • cut命令的默认分隔符是制表符,也就是tab键,对空格作为分隔符是支持的,但是不怎么好用,不推荐使用。
    • 如果需要用空格来截取文本数据,可以用后边讲的awk来进行截取。

    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16351058.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    数据结构系列-堆排序当中的T-TOK问题
    汽车软件单元测试分析
    QFramework Pro 开发日志(七)v0.4 版本审核通过 与 对话编辑器功能预告
    B-000 硬件工程师手册
    mysql8多主多从复制搭建
    KDE(Kernel Density Estimation)(核密度估计)是什么?
    板卡测评 | 基于TI AM5708开发板——ARM+DSP多核异构开发案例分享
    程序员没有工作经验怎么办?能不能找到工作?
    002讲:CAD2024下方任务栏不显示坐标解决方案——CAD知识讲堂
    18 Linux之Python定制篇-Python开发平台Ubuntu
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16351058.html