awk是从输入的文本或者其他地方将一行数据进行拆分,类似与linux提供的一款轻量级的编程语句,可以实现简单的功能。
参考:https://awk.readthedocs.io/en/latest/chapter-one.html
eg: 筛选出某个进程的pid
ps -ef | grep $PACKAGED_NAME_ADMIN.jar | grep -v grep | awk '{ print $2 }
eg:查询文本文件的内容t.txt
3 3 3
1 1 1
2 2 2
基本格式:
awk '[筛选条件] {要执行的命令}' 要查询的文本
awk '{print $1,$2,$3}' t.txt
awk '$1>0 {print $1,$2,$3}' t.txt
eg:计算文本中第一列的和,注意是大写END
awk '{emp=emp+$1} END {print "第一列的和:",emp}' t.txt
求平均数
awk '{emp=emp+$1;num=num+1} END {print "第一列的平均数:",emp/num}' t.txt
求两列的平均数
awk '{emp=emp+$1;num=num+1;lie2=lie2+$2} END {print "第一列的平均数:",emp/num,"\n第二列的平均数:",lie2/num}' t.txt
第一列的平均数: 2
第二列的平均数: 2
awk的if els 语句,注意事项,每个判断后面都必须跟;隔开,否则报错
eg: 判断第一列的总和大于1就输出一句话,小于1也输出一句话。
awk '{emp=emp+$1} END {if (emp>1) print "第一列总和大于1",emp; else print "第一列总和小于1",emp}' t.txt
第一列总和大于1
awk的for循环
eg:将第一列计数,然后打印出结果10次
awk '$1>0 {emp=emp+1} END {for(i=0;i<10;i++) print "打印10次结果:",emp}' t.txt
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
打印10次结果: 3
分组输出最新值
解释说明:定义了一个arrays数组,下表为第一列$1,值为第二列$2,然后打印输出arrays中 下标和value,将文件输出到ck_result_日期下面。
awk '$2>0 {arrays[$1]=$2} END {for (k in arrays) {print k,arrays[k]}}' ck_table.txt > ./ck_result_${d}.txt