awk常用方法
awk内建变量
1 |
|
BEGIN EDN语法
- BEGIN{ 这里面放的是执行前的语句 }
- {这里面放的是处理每一行时要执行的语句}
- END {这里面放的是处理完所有的行后要执行的语句 }
示例如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#运行前
BEGIN {
math = 0
english = 0
computer = 0
printf"NAME NO. MATH ENGLISH COMPUTER TOTAL\n" printf"---------------------------------------------\n"
}
#运行中
{
math+=$3
english+=$4
computer+=$5
printf"%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
printf"---------------------------------------------\n"
printf" TOTAL:%10d %8d %8d \n", math, english, computer
printf"AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
常用功能
求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
求最大值
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
求最小值(min的初始值设置一个超大数即可)
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'
求访问次数的Top 10 Resource,可以根据此进行优化
cat output/logs/cookie_logs/
date +%u/cookie_log|grep -v '172.16'|grep -v '127.0.0.1' |awk -F' ' '{ if(index($1,"219.141.246")!=0) print $2; else print $1 } '|sort|uniq -c|sort -n |tail -n 10
求最大最小值
cat 1.log | awk 'BEGIN {max=0; min=1000} {sum +=$9; num +=1; if($9>max) max=$9 fi; if($9<min) min=$9 fi;} END {print "avg=",sum/num, "\nmax=",max, "\nmin=", min}'
awk中执行shell命令
1 |
|
awk 多个进程号转为数组
aaa=(
ps -ef |grep xxx |grep -v grep |awk ‘{print $2}’) echo "${aaa[@]}"
awk -F 特殊字符
,\"dn\":\"baiducdnct.inter.iqiyi.com\" 以"dn\":\来分割,因为\为特殊字符,所以需要转义,每4个\为一个过滤\ awk -F'dn\\\\":\\\\' '{print $2}'
awk 打印从某一列到最后一列的内容
awk -F " " '{for (i=2;i<=NF;i++)printf("%s ", $i);print ""}'
清理除第一行和最后一行的的bash进程
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!