栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

常用shell(shell基础)

常用shell(shell基础)

shell工具cut、sed、awk、sort

文章目录

shell工具cut、sed、awk、sort1、cut2、sed3、awk4、sort

1、cut

描述:

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

    基本用法

cut [选项参数] filename

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

    选项参数说明

    项参数功能
    -f列号,提取第几列
    -d分隔符,按照指定分隔符分割列

    操作案例:
    (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命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

    基本用法

    sed [选项参数] ‘command’ filename

    选项参数说明

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

    命令功能描述

    命令功能描述
    a新增,a的后面可以接字串,在下一行出现
    d删除
    s查找并替换

    案例操作
    (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

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

    基本用法

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

    选项参数说明

    选项参数功能
    -F指定输入文件折分隔符
    -v赋值一个用户定义变量

    案例实操
    (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
    
    

    awk的内置变量

    变量说明
    FILENAME文件名
    NR已读的记录数
    NF浏览记录的域的个数(切割后,列的个数)

    案例实操
    (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里非常有用,它将文件进行排序,并将排序结果标准输出。

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

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

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

    案例实操
    (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
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/771484.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号