• linux 文本处理工具 cut 和 awk


    linux 文本处理工具 cut 和 awk

    cut

    cut 剪切数据。从文件的每一行剪切字节、字符、和字段,并将这些字节、字符和字段输出。

    1. 基本用法

    cut [选项参数] 文件名
    默认分隔符是制表符
    
    • 1
    • 2

    2. 选项参数说明

    -f 所提取的列号
    -d 分隔符,按照指定分隔符分割列
    -c 按字符进行切割,后加数字表示第几列
    
    • 1
    • 2
    • 3

    3. 案例演示

    [root@daidai tmp]# cat ./data.txt 
    zhanglaosan 20 man zhangsan.com
    lilaosi 21 man lisi.cn
    walaowu 20 woman wangwu.org
    
    # 取第一列
    [root@daidai tmp]# cut -d " " -f 1 ./data.txt 
    zhanglaosan
    lilaosi
    walaowu
    
    # 取第1,3列
    [root@daidai tmp]# cut -d " " -f 1,3  ./data.txt 
    zhanglaosan man
    lilaosi man
    walaowu woman
    
    # 取ifconfig ens33结果中的ip地址
    [root@daidai tmp]# ifconfig ens33 | grep broadcast | cut -d " " -f 10
    192.168.100.101
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    解释一下上面的为什么是10

    在这里插入图片描述

    前面绿色的部分为8个“ ”,后一部分为1个“ ”,可以理解为取第10个“ ”前面的那一列。

    awk

    把文件逐行读入,默认以空格为分隔符进行切分,再进行处理。

    1. 基本用法

    awk [选项参数] '/parttern1/{actiion1} /parttern2/{actiion2}...' 文件名
    pattern:awk在数据中心查找的内容,就是匹配模式。
    action:在找到匹配内容时执行的命令。
    
    • 1
    • 2
    • 3

    2. 选项参数说明

    -F 指定分割符
    -v 赋值一个用户定义变量
    
    • 1
    • 2

    3. 案例演示

    [root@daidai tmp]# cat ./passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    
    # 搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 7 列。
    [root@daidai tmp]# awk -F : '/^root/{print}' ./passwd 
    root:x:0:0:root:/root:/bin/bash
    [root@daidai tmp]# awk -F : '/^root/{print $7}' ./passwd 
    /bin/bash
    
    # 搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列,中间以“,”号分割。
    [root@daidai tmp]# awk -F : '/^root/{print $1 "," $7}' ./passwd 
    root,/bin/bash
    
    # 只显示/etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列名 user,shell 在最后一行添加"end..."。
    [root@daidai tmp]# awk -F : 'BEGIN{print "user, bash"} {print $1  ", " $7} END{print "end..."}' ./passwd 
    user, bash
    root, /bin/bash
    bin, /sbin/nologin
    daemon, /sbin/nologin
    adm, /sbin/nologin
    lp, /sbin/nologin
    sync, /bin/sync
    end...
    
    # awk 内置变量
    FILENAME 文件名
    NR 行号
    NF 列数
    
    # 统计 passwd 文件名,每行的行号,每行的列数
    [root@daidai tmp]# awk -F : '{print "filename:" FILENAME " linenum:" NR " col:" NF}' ./passwd 
    filename:./passwd linenum:1 col:7
    filename:./passwd linenum:2 col:7
    filename:./passwd linenum:3 col:7
    filename:./passwd linenum:4 col:7
    filename:./passwd linenum:5 col:7
    filename:./passwd linenum:6 col:7
    
    # 取ifconfig ens33结果中的ip地址
    [root@daidai tmp]# ifconfig ens33 | awk '/broadcast/{print $2}' 
    192.168.100.101
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    【cmake】CMake编译Qt项目
    《洛谷刷题笔记》day2
    为什么低代码CRM越来越受欢迎?
    抽象轻松的C语言
    嵌入式硬件知识——设计简单的实时温度监测系统
    source insight4菜单工具按钮变乱恢复
    #leetcode 56 Merge Intervals
    [DP] ABC262 D - I Hate Non-integer Number
    Spring MVC Http Event Stream
    cloud的概念
  • 原文地址:https://blog.csdn.net/weixin_46376562/article/details/126198745