日期:2014-05-16 浏览次数:20834 次
Linux------awk使用
?
一、分析日志文件
?
课前基础:? awk基本使用
awk ' BEGIN{ print "start" } {commands} END{ print "end" }'
先执行BEIGN语句,然后重复的执行commands行,直到文件全部读取完毕,读取文件末尾时,执行END语句块。
这个语句可以没有BEGIN、END但是必须有{commands}
?
1、awk特殊变量:
2、将外部变量传递给awk:
???? 借助于-v参数
?
3、对awk的行进行过滤
?
??? awk 'NR <5' 行号小于5;awk 'NR==1,NR==4' 行号在1到5之间的行
?
4、awk自建的内置函数
split、length、substr等等
?
5、设置字段定界符
?
默认的是空格,我们可以使用-F '分隔符'
?
demo演示:
#!/bin/bash echo $1; grep $1 /data/logs/login-resin-stdout.log|awk -F ' ' '{ arr[split($21,tmp,":")];print tmp[2] }' |awk -v var_1=$2 '{arr[$i]++;}END{for (i in arr){if(arr[i]>var_1){print i,arr[i]}}}'
?
表示的是先文本先按变量$1过滤,然后文本行按照空格分隔,此文本被分成21段,然后将第21段的字符按照字符':'分隔,得到 的数组只要第2的值(注意该数组标量是从1开始),然后统计得到的值重复的次数
?
6、统计线程swap大于10000的
?
for i in `ls /proc/|grep -v [a-z]`;do cat /proc/$i/smaps |grep Swap|awk -v pid=$i 'BEGIN{total=0}{total+=$2}END{if (total >10000){print "pid: " pid " " total " M"}}';done?