前言
最近在生产上查问题,也是练就了一下awk的命令。
生产上的数据安全性要求比较高,一般要拿到测试环境都需要脱敏,但是脱敏的数据会有很多程序上的不适应。
所以有时候查询问题,查询一条消费记录,可能是要在上百万的数据中找到,并分析异常原因。awk、grep 都是经常用到的,基本上有时候还要在命令行写shell代码,熟能生巧,多敲几遍,也是能很快速熟练掌握的。
其实建议大家学习的是一种思路,而不是死记命令,年纪大了,也记不住那么多命令了,/捂脸
测试文件test.txt
a|b|c|d|1|sdsds
a|b|c|d|2|sdsds
s|b|c|d|3|sdsds
d|b|c|d|43|sdsds
c|b|c|d|1|sdsds
a|b|c|d|2|sdsds
d|b|c|d|5|sdsds
awk查看一条记录
#$0 是代表一整行的记录 $1代表以空格界的第一行信息,这样看到的是全部的记录
awk '{print $0}' test.txt
awk '{print $1}' test.txt
如果不太理解的话,可以试试test.txt换成下面案例
a|b|c|d|1|sdsds iisddwe wew
a|b|c|d|2|sdsds i sddsd
s|b|c|d|3|sdsds sdsd
d|b|c|d|43|sdsds
c|b|c|d|1|sdsds
a|b|c|d|2|sdsds
d|b|c|d|5|sdsds
awk以分隔符查找数据
#以"|"分割数据,输出1,2,3,4行数据
awk -F"|" '{print $1,$2,$3,$4}' test.txt
awk以分隔符拆分数据, 求特定列数据计算
#求第5列的数据之和
awk -F"|" 'BEGIN{SUM=0}{SUM=SUM+$5} END {print SUM}' test.txt
awk以分隔符拆分数据,求特定列数据计算,添加if条件判断
#根据不同条件获取不同条件的和
awk -F"|" 'BEGIN{aSUM=0;bSUM=0;cSUM=0}{if( $1 == "a") aSUM=aSUM+$5;else if( $1 == "b") bSUM=bSUM+$5;else cSUM=cSUM+$5} END{print aSUM,bSUM,cSUM}' test.txt
如果有两三个文件需要一起求和,那么我们可以在上面的语句中添加 文件即可
awk -F"|" 'BEGIN{aSUM=0;bSUM=0;cSUM=0}{if( $1 == "a") aSUM=aSUM+$5;else if( $1 == "b") bSUM=bSUM+$5;else cSUM=cSUM+$5} END{print aSUM,bSUM,cSUM}' test.txt test1.txt test2.txt
awk处理两个文件中相同部分内容, 此内容可以是相同的一行,也有可能是拼接出来的一个key值,两文件比较输出结果文件
待续…