linux awk和jq基础使用

为什么使用awk?
使用awk的第一个理由是基于文本的样式扫描和处理是我们经常做的工作,awk所做的工作有些象数据库,但与数据库不同的是,它处理的是文本文件,这些文件没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。而数据库文件往往具有特殊的存储格式,这使得它们必须用数据库处理程序来处理它们。既然这种类似于数据库的处理工作我们经常会遇到,我们就应当找到处理它们的简便易行的方法,UNIX有很多这方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分优秀的一种。
使用awk的第二个理由是awk是一个简单的工具,当然这是相对于其强大的功能来说的。相对其他程序语言来说,awk完成同样的功能要方便和简捷得多。这首先是因为awk提供了适应多种需要的解决方案:从解决简单问题的awk命令行到复杂而精巧的awk程序设计语言,这样做的好处是,你可以不必用复杂的方法去解决本来很简单的问题。例如,你可以用一个命令行解决简单的问题,而C不行,即使一个再简单的程序,C语言也必须经过编写、编译的全过程。其次,awk本身是解释执行的,这就使得awk程序不必经过编译的过程,同时,这也使得它与shell程序能够很好的契合。最后,awk本身较C语言简单,是一种功能强大且不需要大量时间学习就能掌握其技巧的开发工具。
使用awk的第三个理由是awk是一个容易获得的工具。与C和C++语言不同,awk只有一个文件(/bin/awk),而且几乎每个版本的UNIX都提供各自版本的awk,你完全不必费心去想如何获得awk。
基于以上理由,再加上awk强大的功能,我们有理由说,如果你要处理与文本样式扫描相关的工作,awk应该是你的第一选择。在这里有一个可遵循的一般原则:如果你用普通的shell有困难的话,试试awk。如果awk仍不能解决问题,则便用其他如python等语言。
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息。

基础数据
在这里插入图片描述

一、输出
1,输出文件中支付时间和bn的数据(默认用空格做分割,-F指定分隔符)
awk -F ‘\t’ ‘{print $3,$4}’ orders.txt
cat orders.txt |awk -F ‘\t’ ‘{print $3,$4}’
2,格式化输出文件中支付时间和bn的数据(和c语言中的printf用法一样,%-8s的意思是每行留出8个字符的位置来输出结果)
cat orders.txt |awk -F ‘\t’ ‘{printf “%-14s %-8s\n”,$3,$4}’
3,多分隔符获取支付时间时分秒
cat orders.txt |awk -F ‘[\t,:]’ ‘{print $4}’
二、变量使用
1,将goods_price的价格统一加上一个变量值(-v定义变量)
awk -F ‘\t’ -v total=10 ‘{print $14+total}’ orders.txt

三、运算符和系统变量
在这里插入图片描述
系统变量
在这里插入图片描述

1,获取goods_price中价格大于9000的值
awk -F ‘\t’ ‘$14>9000’ orders.txt
2,获取goods_price中价格大于200并且bn=3490797的地址
awk -F ‘\t’ ‘$14>200&&$4==2185765 {print $1,$4}’ orders.txt
3,将goods_price的价格求和
awk -F ‘\t’ ‘BEGIN{total=0;}{total+=$14} END{print total;}’ orders.txt
四、正则匹配
1,获取goods_name中包含雨衣的地址和名称
awk -F ‘\t’ ‘$5 ~ /雨衣/ {print $1,$5}’ orders.txt
2,获取内容中包括led(不区分大小写)的地址和名称
awk -F ‘\t’ ‘BEGIN{IGNORECASE=1} /led/ {print $1,$5}’ orders.txt
3,获取内容中不存在手的地址和名称
awk -F ‘\t’ ‘!/手/ {print $1,$5}’ orders.txt
五、使用JQ解析json数据
1,获取attr_json中的value值
awk -F ‘\t’ ‘NR>1 {print $17}’ orders.txt|jq ‘.[0].attributeValue’
2,获取attr_json中的value值再重新组装
awk -F ‘\t’ ‘NR>1 {print $17}’ orders.txt|jq ‘.[0] | {attributeName:.attributeName,attributeValue:.attributeValue}’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值