美文网首页
awk工具日常统计(if语法)

awk工具日常统计(if语法)

作者: 联想桥南 | 来源:发表于2017-12-25 22:48 被阅读0次

    工作日常,需要查数据库,或者load日志。筛出符合一定业务逻辑的数据。
    然后整理成一定格式的文件,有时基础数据不全,还要在晒出的数据文件基础上,做些逻辑判断,添加一些数据。

    比如,线上业务充值赠送礼品。不同的充值额度,赠送的礼品数不同。
    原始文件

    "11111","5"
    "22222","10"
    "33333","15"
    "44444","20"
    "55555","25"
    "66666","30"
    

    其中第一列是用户id,第二列是充值金额
    目标文件是

    11111,5,100
    22222,10,100
    33333,15,200
    44444,20,200
    55555,25,300
    66666,30,300
    

    想判断第二列的值,1-10赠100,11-20赠200,21-30赠300。第三列是赠送的礼品数。

    分两步,先预处理下文件。第二列是字符串,没法比较大小,先去掉“”。这个场景比较适合用sed指令工具处理。

    cat file.txt |sed 's/"//g'
    

    's/要替换的字符/替换后的字符/g'
    s替换,g全部替换。

    然后用awk处理,使用if表达式

    cat temp |awk -F ',' '{if ($2>=1&& $2<10) print $1","$2","100; else if ($2>=10&& $2<20) print $1"," $2","200; else if ($2>=20&& $2<=30) print $1","$2","300}'
    

    或者

    cat temp |awk -F ',' '{if ($2>=1&& $2<10) {print $1","$2","100} else if ($2>=10&& $2<20) {print $1"," $2","200} else if ($2>=20&& $2<=30) {print $1","$2","300}}'
    

    语法:

    awk -F ',' '{if(条件){执行表达式}
                      else if(条件){执行表达式}
                      else{执行表达式}}'
    

    或者执行表达式不加大括号,条件之间用;分割。

    有一点调试一会,就是shell脚本里条件里边不支持
    10>a>5表达,要分开。。
    a>5&&a<10
    发现java语法也不支持,我这是在哪看到了这样的写法。。

    sed是流编辑器,是逐行取出文本内容然后再进行处理。既然是编辑器那sed在编辑文件方面就具有很多优势,比如插入新行,修改某行,根据正则匹配某行同时修改。跟我们平时使用的交互式文本编辑器差不多,但是sed可以提前做好剧本,然后无需中断无需交互就能达到最终想要的结果。

    而awk是报表生成工具,也是逐行取出文件,但是取出来的目的是把内容进行二次加工,然后把有用的数据单独用优雅的格式输出,或者进行归纳统计得到统计结果,等等。

    相关文章

      网友评论

          本文标题:awk工具日常统计(if语法)

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