美文网首页
大数据运维-linux强大的awk功能

大数据运维-linux强大的awk功能

作者: 奔腾的小溪 | 来源:发表于2020-05-18 22:55 被阅读0次

    写在前面

    awk定位:用于文本统计的好教官。

    大数据运维过程中经常需要对文本文件或者用户行为日志进行分析。对于持续性输出的数据定时调度到数据库是最常用的方式。但是有些分析属于偶发需求,通过awk命令可以节省入库时间,快速得到分析结果。

    条条大路通罗马,不论是sql还是awk都可以达到分析目的。因此今天将一些常用的sql需求转换成awk脚本,方便我们快速分析。

    请把模式记在心里:awk '{pattern + action}' {filenames} 记好了后往下看。

    一、结构化处理

    文件说明
    创建了awk_example文件,其中第一行分割符为空格,第二行空格符为 [tab]键。

    awk_example.png
    1. 输入分割符设置
    输入分割符(FS)
    awk读取有'\n'换行符分割的文本逐行处理。默认输入分割符是空格或者[tab]键。
    # 默认分割符:默认以空格及tab分割
    脚本:awk '{print $1,$3}' awk_example
    返回值:
    this a
    haha a
    this,is aaa
    
    # 设置两个分割符:空格逗号
    脚本:awk -F '[ ,]+' '{print $1,$2}' awk_example 
    返回值:
    this is
    haha    is  a   dog ! 
    this is
    
    # 设置三个分割符:空格逗号及tab
    脚本: awk -F '[ ,\t]+' '{print $1,$2}' awk_example 
    返回值:
    this is
    haha is
    this is
    

    2. 输出分割符设置
    输出分割符(OFS)
    输出分割符默认的是空格,可以通过-OFS设置

     脚本:awk -v FS='[ ,\t]+'  -v  OFS='#' '{print $1,$2}' awk_example
    返回值:
    this#is
    haha#is
    this#is
    

    二、常见的sql需求转换

    小伙伴们现在我们已经将文本规范化,接下来可以进行各种操作啦。sql vs awk

    # 查找某些字段
    sql: select  name from tb1
    awk: awk -F '[ ,\t]+' '{print $1}'  awk_example  $1指的是第一个字段以此类推 $NF是最后一个字段。
    
    # 查找某些字段个数
    sql: select count(name) from tb1
    awk: awk -F '[ ,\t]+' '{print $1}'  awk_example | wc -l 通过与wc -l的方式统计数量
    
    # 查找某个字段distinct数量
    sql:select count(distinct name) from tb1
    awk:awk '!a[$1]++{print $2}' awk_example | sort | uniq | wc -l
    
    # 查找全部字段
    sql:select * from tb1 
    awk:awk -v FS='[ ,\t]+'   '{for(i=1;i<=NF;i++)printf $i" ";printf "\n"}' awk_example
    
    # where过滤语句
    sql : select name from tb1 where type=""
    awk: awk -F '[ ,\t]+' '{if ($1=="haha") print $2}'  awk_example
    

    more:
    https://www.cnblogs.com/payton/p/4223560.html
    https://www.cnblogs.com/ginvip/p/6352157.html

    参考文件:
    1.http://www.zsythink.net/archives/1357/

    相关文章

      网友评论

          本文标题:大数据运维-linux强大的awk功能

          本文链接:https://www.haomeiwen.com/subject/gfruohtx.html