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

工作日常,需要查数据库,或者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是报表生成工具,也是逐行取出文件,但是取出来的目的是把内容进行二次加工,然后把有用的数据单独用优雅的格式输出,或者进行归纳统计得到统计结果,等等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文本处理工具sed sed处理文本时是以行为单位的,每处理完一行就立即打印出来,然后再处理下一行,直至全文处理结束...
    485b1aca799e阅读 2,952评论 0 4
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,242评论 2 33
  • sed与awk实例 文本间隔 在每一行后面增加一空行 将原来的所有空行删除并在每一行后面增加一空行。这样在输出的文...
    stuha阅读 1,929评论 0 21
  • 知识点 sort uniq cut wc sed命令 awk命令 crontab定时器 sort sort 命令对...
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,127评论 0 0