当前位置 博文首页 > 大数据manor的博客 :大数据开发工程师基本功修炼之Linux学习笔

    大数据manor的博客 :大数据开发工程师基本功修炼之Linux学习笔

    作者:[db:作者] 时间:2021-07-16 18:50

    管道相关命令

    目标

    • cut
    • sort
    • wc
    • uniq
    • tee
    • tr
    • split
    • awk
    • sed
    • grep
    • 准备工作

      zhangsan 68 99 26
      lisi 98 66 96
      wangwu 38 33 86
      zhaoliu 78 44 36
      maq 88 22 66
      zhouba 98 44 46
      
    • 以上是成绩表信息

    • 使用 逗号 分割, 第一列 是 姓名, 第二列是 语文成绩, 第三列是 数学成绩, 第四列是 英语成绩

    准备工作

    vim 1.txt

    111:aaa:bbb:ccc
    222:ddd:eee:fff
    333:ggg:hhh
    444:iii
    

    1 cut

    1.1 目标

    • cut 根据条件 从命令结果中 提取 对应内容

    1.2 实现

    第一步: 截取出1.txt文件中前2行的第5个字符

    命令含义
    cut 动作 文件从指定文件 截取内容
    • 参数
    参数英文含义
    -ccharacters按字符选取内容
    head -2 1.txt | cut -c 5
    

    第二步: 截取出1.txt文件中前2行以”:”进行分割的第1,2段内容

    参数英文含义
    -d '分隔符'delimiter指定分隔符
    -f n1,n2fields分割以后显示第几段内容, 使用 , 分割

    范围控制

    范围含义
    n只显示第n项
    n-显示 从第n项 一直到行尾
    n-m显示 从第n项 到 第m项(包括m)
    head -2 1.txt | cut -d ':' -f 1,2
    
    head -2 1.txt | cut -d ':' -f 1-2
    

    1.3 小结

    • 通过 cut 动作 目标文件 可以根据条件 提取对应内容
    • 准备工作

      vim score.txt

      zhangsan 68 99 26
      lisi 98 66 96
      wangwu 38 33 86
      zhaoliu 78 44 36
      maq 88 22 66
      zhouba 98 44 46
      

    2 sort

    2.1 目标

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

    2.2 路径

    • 第一步: 对字符串排序
    • 第二步: 去重排序
    • 第三步: 对数值排序
    • 第四步: 对成绩排序

    2.3 实现

    第一步: 对字符串排序

    [root@node01 tmp]# cat 2.txt
    banana
    apple
    pear
    orange
    pear
    
    [root@node01 tmp]# sort 2.txt 
    apple
    banana
    orange
    pear
    pear
    

    第二步: 去重排序

    参数英文含义
    -uunique去掉重复的

    它的作用很简单,就是在输出行中去除重复行。

    [root@node01 tmp]# sort -u 2.txt 
    apple
    banana
    orange
    pear
    

    第三步: 对数值排序

    参数英文含义
    -nnumeric-sort按照数值大小排序
    -rreverse使次序颠倒
    • 准备数据

      [root@node01 tmp]# cat 3.txt 
      1
      3
      5
      7
      11
      2
      4
      6
      10
      8
      9
      
    • 默认按照字符串排序

      [root@node01 tmp]# sort 2.txt 
      1
      10
      11
      2
      3
      4
      5
      6
      7
      8
      9
      
    • 升序

      [root@node01 tmp]# sort -n 2.txt
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
    • 倒序

      [root@node01 tmp]# sort -n -r 2.txt
      11
      10
      9
      8
      7
      6
      5
      4
      3
      2
      1
      
    • 合并式

      [root@node01 tmp]# sort -nr 2.txt  
      11
      10
      9
      8
      7
      6
      5
      4
      3
      2
      1
      

    第四步: 对成绩排序

    参数英文含义
    -tfield-separator指定字段分隔符
    -kkey根据那一列排序

    ‘’

    # 根据第二段成绩 进行倒序显示 所有内容
    sort -t ',' -k2nr score.txt 
    

    3 wc命令

    3.1 目标

    • 显示指定文件 字节数, 单词数, 行数 信息.

    3.2 路径

    • 第一步: 显示指定文件 字节数, 单词数, 行数 信息.
    • 第二步: 只显示 文件 的行数
    • 第三步: 统计多个文件的 行数 单词数 字节数
    • 第四步: 查看 /etc 目录下 有多少个 子内容

    3.3 实现

    第一步: 显示指定文件 字节数, 单词数, 行数 信息.

    命令含义
    wc 文件名显示指定文件 字节数, 单词数, 行数 信息
    [root@hadoop01 export]# cat 4.txt
    111
    222 bbb
    333 aaa bbb 
    444 aaa bbb ccc
    555 aaa bbb ccc ddd
    666 aaa bbb ccc ddd eee
    
    [root@hadoop01 export]# wc 4.txt 
     6 21 85 4.txt
    

    第二步: 只显示 文件 的行数

    参数英文含义
    -cbytes字节数
    -wwords单词数
    -llines行数
    [root@hadoop01 export]# wc 4.txt 
     6 21 85 3.txt
    

    第三步: 统计多个文件的 行数 单词数 字节数

    [root@hadoop01 export]# wc 1.txt 2.txt 3.txt 
      4   4  52 1.txt
     11  11  24 2.txt
      6  21  85 3.txt
     21  36 161 总用量
     
    [root@hadoop01 export]# wc *.txt
      4   4  52 1.txt
     11  11  24 2.txt
      6  21  85 3.txt
      6   6  95 score.txt
     27  42 256 总用量
    

    第四步: 查看 /etc 目录下 有多少个 子内容

    [root@hadoop01 export]# ls /etc | wc -w
    240
    

    3.4 小结

    • 通过 wc 文件 就可以 统计 文件的 字节数、单词数、行数.

    4 uniq

    uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。

    4.1 目标

    • uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。

    4.2路径

    • 第一步:实现去重效果
    • 第二步:不但去重,还要 统计出现的次数

    4.3 实现

    第一步:实现去重效果

    命令英文含义
    uniq [参数] 文件unique 唯一去除重复行
    # 准备内容
    [root@hadoop01 export]# cat 5.txt 
    张三 ? ?98
    李四 ? ?100
    王五 ? ?90
    赵六 ? ?95
    麻七 ? ?70
    李四 ? ?100
    王五 ? ?90
    赵六 ? ?95
    麻七 ? ?70
    
    # 排序
    [root@hadoop01 export]# cat 5.txt | sort
    李四 ? ?100
    李四 ? ?100
    麻七 ? ?70
    麻七 ? ?70
    王五 ? ?90
    王五 ? ?90
    张三 ? ?98
    赵六 ? ?95
    赵六 ? ?95
    
    # 去重
    [root@hadoop01 export]# cat 5.txt | sort | uniq
    李四 ? ?100
    麻七 ? ?70
    王五 ? ?90
    张三 ? ?98
    赵六 ? ?95
    
    

    第二步:不但去重,还要 统计出现的次数

    参数英文含义
    -ccount统计每行内容出现的次数
    [root@hadoop01 export]# cat 5.txt | sort | uniq -c
          2 李四 ? ?100
          2 麻七 ? ?70
          2 王五 ? ?90
          1 张三 ? ?98
          2 赵六 ? ?95
    

    4.4 小结

    • 通过 uniq [选项] 文件 就可以完成 去重行 和 统计次数

    5 tee

    5.1 目标

    • 通过 tee 可以将命令结果 通过管道 输出到 多个文件

    5.2 实现

    命令含义
    命令结果 | tee 文件1 文件2 文件3通过 tee 可以将命令结果 通过管道 输出到 多个文件
    • 将去重统计的结果 放到 a.txt、b.txt、c.txt 文件中

      cat 5.txt | sort | uniq -c | tee a.txt b.txt c.txt
      

    5.3 小结

    • 通过 tee 可以将命令结果 通过管道 输出到 多个文件

    6 tr

    6.1 目标

    • 通过 tr 命令用于 替换删除 文件中的字符。

    6.2 路径

    • 第一步: 实现 替换 效果
    • 第二步: 实现 删除 效果
    • 第三步: 完成 单词计数 案例

    6.3 实现

    第一步: 实现 替换效果

    命令英文含义
    命令结果 | tr 被替换的字符 新字符translate实现 替换效果
    # 将 小写i 替换成  大写 I
    # 把itheima的转换为大写
    # 把 HELLO 转成 小写
    
    # 将 小写i 替换成  大写 I
    echo "itheima" | tr 'i' 'I'
    
    # 把itheima的转换为大写
    echo "itheima" |tr '[a-z]' '[A-Z]'
    
    # 把 HELLO 转成 小写
    echo "HELLO" |tr '[A-Z]' '[a-z]'
    

    第二步: 实现删除效果

    命令英文含义
    命令结果 | tr -d 被删除的字符delete删除指定的字符
    • 需求: 删除abc1d4e5f中的数字
    echo 'abc1d4e5f' | tr -d '[0-9]'
    

    第三步: 单词计数

    准备工作
    [root@hadoop01 export]# cat words.txt 
    hello,world,hadoop
    hive,sqoop,flume,hello
    kitty,tom,jerry,world
    hadoop
    

    1 将, 换成 换行

    2 排序

    3 去重

    4 计数

    # 统计每个单词出现的次数
    [root@hadoop01 export]# cat words.txt | tr ',' '\n' | sort | uniq -c
          1 flume
          2 hadoop
          2 hello
          1 hive
          1 jerry
          1 kitty
          1 sqoop
          1 tom
          2 world
    
    • 准备工作

      # 查看 /etc目录下 以.conf以结尾的文件的内容
      cat -n /etc/*.conf
      
      # 将命令结果 追加到 /export/v.txt 文件中
      cat -n /etc/*.conf >> /export/v.txt
      

    7 split

    7.1 目标

    • 通过 split 命令将大文件 切分成 若干小文件

    7.2 路径

    • 第一步: 按 字节 将 大文件 切分成 若干小文件
    • 第二步: 按 行数 将 大文件 切分成 若干小文件

    7.3 实现

    第一步: 按 字节 将 大文件 切分成 若干小文件

    命令英文含义
    split -b 10k 文件byte将大文件切分成若干10KB的小文件

    第二步: 按 行数 将 大文件 切分成 若干小文件

    命令英文含义
    split -l 1000 文件lines将大文件切分成若干1000行 的小文件

    7.4 小结

    • 通过 split 选项 文件名 命令将大文件 切分成 若干小文件

    • 准备工作1:

      vim score.txt

      zhangsan 68 99 26
      lisi 98 66 96
      wangwu 38 33 86
      zhaoliu 78 44 36
      maq 88 22 66
      zhouba 98 44 46
      

    8 awk

    8.1 目标

    • 通过 awk 实现 模糊查询, 按需提取字段, 还可以进行 判断 和 简单的运算等.

    8.2 步骤

    • 第一步: 模糊查询

    • 第二步: 指定分割符, 根据下标显示内容

    • 第三步: 指定输出字段的分割符

    • 第四步: 调用 awk 提供的函数

    • 第五步: 通过if语句判断$4是否及格

    • 第六步: 段内容 求和

    8.3 实现

    第一步: 搜索 zhangsan 和 lisi 的成绩

    命令含义
    awk ‘/zhangsan|lisi/’ score.txt模糊查询

    第二步: 指定分割符, 根据下标显示内容

    命令含义
    awk -F ‘,’ ‘{print $1, $2, $3}’ 1.txt操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

    选项

    选项英文含义
    -F ','field-separator使用 指定字符 分割
    $ + 数字获取第几段内容
    $0获取 当前行 内容
    NFfield表示当前行共有多少个字段
    $NF代表 最后一个字段
    $(NF-1)代表 倒数第二个字段
    NR代表 处理的是第几行

    第三步: 指定分割符, 根据下标显示内容

    命令含义
    awk -F ’ ’ ‘{OFS="==="}{print $1, $2, $3}’ 1.txt操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

    选项

    选项英文含义
    OFS="字符"output field separator向外输出时的段分割字符串

    第四步: 调用 awk 提供的函数

    命令含义
    awk -F ‘,’ ‘{print toupper($2)}’ 1.txt操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容

    常用函数如下:

    函数名含义作用
    toupper()upper字符 转成 大写
    tolower()lower字符 转成小写
    length()length返回 字符长度

    第五步: if语句 查询及格的学生信息

    命令含义
    awk -F ‘,’ ‘{if($4>60) print $1, $4 }’ score.txt如果及格,就显示 $1, $4
    awk -F ‘,’ ‘{if($4>60) print $1, $4, “及格”; else print $1, $4, “不及格”}’ score.txt显示 姓名, $4, 是否及格

    选项

    参数含义
    if($0 ~ “aa”) print $0如果这一行包含 “aa”, 就打印这一行内容
    if($1 ~ “aa”) print $0如果**第一段 **包含 “aa”, 就打印这一行内容
    if($1 == “lisi”) print $0如果第一段 等于 “lisi”, 就打印这一行内容

    第六步: 段内容 求学科平均分

    命令含义
    awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}’ 文件名BEGIN{ 这里面放的是执行前的语句 }
    {这里面放的是处理每一行时要执行的语句}
    END {这里面放的是处理完所有的行后要执行的语句 }
    awk -F ',' 'BEGIN{}{total=total+$4}END{print total, NR, (total/NR)}' score.txt
    
    • 准备工作

      vim 1.txt

      aaa java root
      bbb hello
      ccc rt
      ddd root nologin
      eee rtt
      fff ROOT nologin
      ggg rttt
      

    9 sed

    9.1 目标

    • 通过 sed 可以实现 过滤替换 的功能.

    9.2 路径

    • 第一步: 实现 查询 功能
    • 第二步: 实现 删除 功能
    • 第三步: 实现 修改 功能
    • 第四步: 实现 替换 功能
    • 第五步: 对 原文件 进行操作
    • 第六步: 综合 练习

    9.3 实现

    第一步: 实现 查询 功能

    命令含义
    sed 可选项 目标文件对目标文件 进行 过滤查询替换

    可选参数

    可选项英文含义
    pprint打印
    $代表 最后一行
    -n仅显示处理后的结果
    -eexpression根据表达式 进行处理
    • 练习1 列出 1.txt的 1~5行 的数据

    sed -n -e '1,5p' 1.txt 
    
    • 练习2 列出01.txt的所有数据

    sed -n -e '1,$p' 1.txt 
    
    • 练习3 列出01.txt的所有数据 且 显示行号

    可选项含义
    =打印当前行号
    sed -n -e '1,$=' -e '1,$p' 1.txt 
    
    简化版
    cat -n 1.txt
    cat -b 1.txt
    nl 1.txt
    
    • 练习4: 查找01.txt中包含root行

    答案:

    sed -n -e '/root/p' 1.txt
    
    • 练习5?列出01.txt中包含root的内容,root不区分大小写,并显示行号

    可选项英文含义
    Iignore忽略大小写

    答案:

    nl 1.txt | sed -n -e '/root/Ip'
    
    nl 01.txt | grep -i root
    
    cat -n 01.txt | grep -i root
    
    • 练习6 查找出1.txt中 字母r后面是多个t的行,并显示行号

    可选项英文含义
    -rregexp-extended识别正则

    答案:

    nl 01.txt | sed -nr -e '/r+t/p'
    

    或者

    sed -nr -e '/r+t/p' -e '/r+t/=' 01.txt
    

    第二步: 实现 删除 功能

    • 练习1?删除01.txt中前3行数据,并显示行号

    可选项英文含义
    ddelete删除指定内容

    答案:

    nl 01.txt | sed -e '1,3d'
    
    • 练习2?保留1.txt中前4行数据,并显示行号

    答案:

    nl 01.txt | sed -e '5,$d'
    
    nl 1.txt | sed -n -e '1,4p'
    

    第三步: 实现 修改 功能

    • 练习1: 在01.txt的第二行后添加aaaaa,并显示行号

    参数英文含义
    iinsert目标前面 插入内容
    aappend目标后面 追加内容

    答案:

    nl 01.txt | sed -e '2a aaaaa'
    
    • 练习2? 在1.txt的第1行前添加bbbbb,并显示行号

    答案:

    nl 01.txt | sed -e '1i bbbbb'
    

    第四步: 实现 替换 功能

    • 练习1? 把1.txt中的nologin替换成为huawei,并显示行号

    英文含义
    s/oldString/newString/replace替换

    答案:

    nl 1.txt | sed -e 's/nologin/huawei/'
    
    • 练习2? 把01.txt中的1,2行替换为aaa,并显示行号

    选项英文
    2c 新字符串replace使用新字符串 替换 选中的行

    答案:

    nl passwd | sed -e '1,2c aaa'
    

    第五步: 对 原文件 进行操作

    • 练习1? 在01.txt中把nologin替换为 huawei

    参数英文含义
    -iin-place替换原有文件内容

    答案:

    sed -i -e 's/nologin/huawei/' 01.txt
    
    • 练习2? 在01.txt文件中第2、3行替换为aaaaaa

    答案:

    sed -i -e '2,3c aaa' 01.txt
    

    注意:在进行操作之前,最好是对数据进行备份,放置操作失误,数据无法恢复!

    • 练习3?删除01.txt中前2行数据,并且删除原文件中的数据

    答案:

    sed -i -e '1,2d' 01.txt
    
    
    nl passwd 查看数据
    

    第六步: 综合 练习

    • 练习1?获取ip地址

    答案:

    ifconfig eth0 | grep "inet addr" | sed -e 's/^.*inet addr://' | sed -e 's/Bcast:.*$//' 
    
    • 练习2?从1.txt中提出数据,匹配出包含root的内容,再把nologin替换为itheima

    答案:

    nl 01.txt | grep 'root' | sed -e 's/nologin/itheima/'
    
    或者
    
    nl 01.txt | sed -n -e '/root/p' | sed -e 's/nologin/itheima/'
    
    或者
    
    nl 01.txt | sed -n -e '/root/{s/nologin/itheima/p}' #只显示替换内容的行
    
    • 练习3? 从1.txt中提出数据,删除前2行,并把nologin替换为itheima,并显示行号

    答案:

    nl 01.txt | sed -e '1,2d' | sed -e 's/nologin/itheima/'
    
    cs
    下一篇:没有了