linux之shell快速入门系列<8> | shell工具cut、sed、awk、sort

shell工具cut、sed、awk、sort

文章目录

  • shell工具cut、sed、awk、sort
  • 1、cut
  • 2、sed
  • 3、awk
  • 4、sort

1、cut

描述:

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

  1. 基本用法

cut [选项参数] filename

说明:默认分隔符是制表符

  1. 选项参数说明

    项参数 功能
    -f 列号,提取第几列
    -d 分隔符,按照指定分隔符分割列
  2. 操作案例:
    (0)数据准备

    [root@bigdata01 centos-shell]# cat cut.txt
    chen wei ting
    xu ya dong
    zhong guan cun
    bei jing shi
    xie ting feng
    wang ya li
    

    (1)切割cut.txt第一列

    [root@bigdata01 centos-shell]# cut -d " " -f 1 cut.txt
    chen
    xu
    zhong
    bei
    xie
    wang
    

    (2)切割cut.txt第二、三列

    [root@bigdata01 centos-shell]# cut -d " " -f 2,3 cut.txt
    wei ting
    ya dong
    guan cun
    jing shi
    ting feng
    ya li
    

    (3)在cut.txt文件中切割出guan

    [root@bigdata01 centos-shell]# cat cut.txt | grep "xie" | cut -d " " -f 1
    xie
    

    (4)选取系统PATH变量值,第15个“:”开始后的所有路径:

    [root@bigdata01 centos-shell]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/module/
    jdk1.8.0_171/bin:/opt/module/jdk1.8.0_171/jre/bin:/opt/module/
    hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/opt/module/
    hbase-2.0.3/bin:/opt/module/sqoop/bin:/opt/module/zookeeper-
    3.4.5/bin:/opt/module/kafka/bin:/opt/module/flume/bin:/opt/
    module/hive/bin:/opt/module/jdk1.8.0_171/bin:/opt/module/
    jdk1.8.0_171/jre/bin:/opt/module/hadoop-2.7.2/bin:/opt/
    module/hadoop-2.7.2/sbin:/opt/module/hbase-
    2.0.3/bin:/opt/module/sqoop/bin:/opt/module/zookeeper-
    3.4.5/bin:/opt/module/kafka/bin:/opt/module/flume/
    bin:/opt/module/hive/bin:/root/bin
    
    [root@bigdata01 centos-shell]# echo $PATH | cut -d: -f 15-
    /opt/module/jdk1.8.0_171/bin:/opt/module/jdk1.8.0_171/jre/bin:/opt/
    module/hadoop-2.7.2/bin:/opt/module/hadoop-2.7.2/sbin:/opt/module/hbase-
    2.0.3/bin:/opt/module/sqoop/bin:/opt/module/zookeeper-
    3.4.5/bin:/opt/module/kafka/bin:/opt/module/flume/bin:/opt/
    module/hive/bin:/root/bin
    

2、sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

  1. 基本用法

    sed [选项参数] ‘command’ filename

  2. 选项参数说明

    项参数 功能
    -e 直接在指令列模式上进行sed的动作编辑
  3. 命令功能描述

    命令 功能描述
    a 新增,a的后面可以接字串,在下一行出现
    d 删除
    s 查找并替换
  4. 案例操作
    (0)数据准备

    [root@bigdata01 centos-shell]# cat cut.txt
    chen wei ting
    xu ya dong
    zhong guan cun
    bei jing shi
    xie ting feng
    wang ya li
    

    (1)将“mei nv”这个单词插入到sed.txt第二行的下一行,打印。

    [root@bigdata01 centos-shell]# sed '2a mei mei' sed.txt
    chen wei ting
    xu ya dong
    mei mei
    zhong guan cun
    bei jing shi
    xie ting feng
    wang ya li
    
    [root@bigdata01 centos-shell]# cat sed.txt
    chen wei ting
    xu ya dong
    zhong guan cun
    bei jing shi
    xie ting feng
    wang ya li\
    

    注意:文件并没有改变

    (2)删除sed.txt文件所有包含wo的行

    [root@bigdata01 centos-shell]# sed '/wang/d' sed.txt
    chen wei ting
    xu ya dong
    zhong guan cun
    bei jing shi
    xie ting feng
    

    (3)将sed.txt文件中wo替换为ni

    [root@bigdata01 centos-shell]# sed 's/wang/xu/g' sed.txt
    chen wei ting
    xu ya dong
    zhong guan cun
    bei jing shi
    xie ting feng
    xu ya li
    

    注意:‘g’表示global,全部替换

3、awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

  1. 基本用法

awk [选项参数] ‘pattern1{action1} pattern2{action2}…’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令

  1. 选项参数说明

    选项参数 功能
    -F 指定输入文件折分隔符
    -v 赋值一个用户定义变量
  2. 案例实操
    (0)数据准备

    [root@bigdata01 centos-shell]# vi awk.txt
    [root@bigdata01 centos-shell]# cat awk.txt
    root 1 work blask dadf fdafd gerq qefad fdae
    root 2 fdaqe eqfda  fqef eqf  fqdf 89     fefq
    root 3 fadff fqfda qfda efqdad  ef 98455 efad
    root 4 dfaf efda efad   fadfdq feghy 89413 efqe
    

    (1)搜索awk.txt文件以root关键字开头的所有行,并输出该行的第5列。

    [root@bigdata01 centos-shell]# awk -F " " '/^root/{print $5}' awk.txt /bin/bash
    dadf
    fqef
    qfda
    efad
    

    (2)搜索awk.txt文件以root关键字开头的所有行,并输出该行的第3列和第6列,中间以“,”号分割。

    [root@bigdata01 centos-shell]# awk -F " " '/^root/{print $2","$6}' awk.txt /bin/bash
    hello,fdafd
    opfa,eqf
    cxae,efqdad
    dace,fadfdq
    

    注意:只有匹配了pattern的行才会执行action

    (3) 将awk.txt文件中的用户id增加数值1并输出

    [root@bigdata01 centos-shell]# awk -v i=1 -F " " '{print $2+i}' awk.txt
    2
    3
    4
    5
    
    
  3. awk的内置变量

    变量 说明
    FILENAME 文件名
    NR 已读的记录数
    NF 浏览记录的域的个数(切割后,列的个数)
  4. 案例实操
    (1)统计awk.txt文件名,每行的行号,每行的列数

    [root@bigdata01 centos-shell]# awk -F " " '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' awk.txt
    filename:awk.txt, linenumber:1,columns:9
    filename:awk.txt, linenumber:2,columns:9
    filename:awk.txt, linenumber:3,columns:9
    filename:awk.txt, linenumber:4,columns:9
    

    (2) 查询sed.txt中空行所在的行号

    [root@bigdata01 centos-shell]# awk '/^$/{print NR}' sed.txt
    2
    5
    

4、sort

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

  1. 基本语法
    sort(选项)(参数)

    选项 说明
    -n 依照数值的大小排序
    -r 以相反的顺序来排序
    -t 设置排序时所用的分隔字符
    -k 指定需要排序的列

    参数:指定待排序的文件列表

  2. 案例实操
    (0)数据准备

    [root@bigdata01 centos-shell]# vi sort.sh
    bb:40:5.4
    bd:20:4.2
    xz:50:2.3
    cls:10:3.5
    ss:30:1.6
    

    (1)按照“:”分割后的第三列倒序排序。

    [root@bigdata01 centos-shell]# sort -t : -nrk 3  sort.sh
    bb:40:5.4
    bd:20:4.2
    cls:10:3.5
    xz:50:2.3
    ss:30:1.6
    

你可能感兴趣的:(Linux操作,linux,bash,centos)