• linux文本分析利器awk


    转 快速理解linux文本分析利器awk

    原文链接 杜亦舒 性能与架构 

    awk是什么


    如果工作中需要操作linux比较多,那么awk是非常值得学习的


    awk是一个极其强大的文本分析工具,把文件逐行的读入,以指定分隔符将每行切片,切开的部分再进行各种分析处理


    可以使用awk创建程序,来读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有很多其他的功能


    awk使用示例


    通过一些简单的示例来认识一下awk


    (1) ll | awk '{print $9}' 


    这个命令的结果是只显示文件名列表


    工作过程


    awk命令接收 ll 结果信息,并逐行处理

    对每一行结果记录按空格(空格是默认分隔符)分割,并打印出第9列的信息


    语法说明


    单引号('')里面的部分是awk要执行的内容,花括号({})中是一个代码块,单引号中可以有多个花括号部分


    print是一个输出命令


    $9 表示分割结果中的第9列内容,分割结果相当于一个数组,从 0-n,$0 是没分割的整行内容,$n 是分割后的第 n 列内容


    (2)awk -F ':' '{print $1" "$6}' /etc/passwd


    上个命令是通过管道处理命令结果


    这个命令是处理文件(/etc/passwd)的内容,显示出用户名、用户目录列表


    passwd文件中每行内容是用 ':' 分隔的,要使用 -F 参数来指定分隔符


    awk命令的尾部跟上文件名,就表示要处理这个文件


    $1" "$6 是组织结果信息显示形式,第1列内容 + tab + 第6列内容


    (3)awk -F: '/root/{print $0}' /etc/passwd


    上两个命令是处理每一行记录,如果想过滤出自己关注的记录,可以使用匹配模式


    这个命令就是对每行进行匹配,如果这一行信息中含有 root,才执行后面{}中的命令


    双斜杠(/.../)中支持正则表达式,例如匹配以 root 开头的行


    awk -F: '/^root/{print $0}' /etc/passwd


    (4)awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd


    awk还内置了一些有用的变量,例如这个命令中打印出了


    ‘文件名’ - FILENAME

    ‘行号’ - NR

    ‘列号’ - NF


    (5)awk -F ':' 'BEGIN {print "header"} {print $1} END {print "foot"}' /etc/passwd


    这个命令中多了两个新部分:


    BEGIN {print "header"}

    END {print "foot"}


    BEGIN 是开始处理前的动作,END 是处理后的动作


    工作流程


    1)先执行BEGING


    对应此例中的 BEGIN {print "header"}


    2)读取文件,取得第一行进行分割,然后执行动作,对应此例中的 {print $1},直至处理完每一行


    3)执行END操作


    对应此例中的 END {print "foot"}


    (6)ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print size/1024/1024,"M"}'


    此命令统计文件夹下的文件总大小,以M为单位


    此例中新增了一个概念:变量


    在起始部分 BEGIN {size=0;} 中,定义了一个变量,名为 size,初始化为 0


    在每行对应的处理动作为 {size=size+$5;},对size变量值进行累加


    在结束部分 END{print size/1024/1024,"M"} 中,对 size 值转换为M,然后打印出来


    (7)ls -l |awk 'BEGIN {size=0;} {if($5!=4096){size=size+$5;}} END{print size/1024/1024,"M"}'


    此命令在上个例子的基础上过滤掉了文件夹的大下


    过滤是通过条件判断来实现的,文件夹的大小为 4096


    awk中的条件语句是从C语言中借鉴来的,支持 if、while、do/while、for、break、continue


    ---


    通过上面的几个例子,已经可以看到awk的概貌,也可以理解了为什么awk这么强大,它有内置变量、可以自定义变量、支持条件判断语句、支持正则表达式…… 可以视为一门语言了


    awk还有很多其他高级用法,有兴趣的话可以深入学习一下

  • 相关阅读:
    MapReduce之多个Job串联的案例
    MapReduce之MapJoin案例
    MapReduce之ReduceJoin案例
    PPP协议实现透明传输的2种方法
    Mcal使用记录
    RTA-OS使用记录
    RLM的license管理工具的特点
    对license要求比较严格的软件
    自己的文件上传到npm
    Tomcat服务器安装SSL证书>安装PFX格式证书
  • 原文地址:https://www.cnblogs.com/xmanblue/p/6497342.html
Copyright © 2020-2023  润新知