定位分析脚本
shell脚本实例,初级待优化。
#!/bin/bash
#echo >tmp.txt #初始化tmp.txt文件,用作存取每天错误最多的5个省份
dir=/wh_k/num
echo "" | tee $dir/$j.txt #初始化各省份信息
A=`cat /wh_k/Sfen.txt` #获取所有省份信息
for i in $A #获取每天错误最多的省份
do
echo >/wh_k/num/$i.txt
(echo -n "$i " && grep $i test.txt | awk '{print $1}' | awk '{sum+=$1}END{print sum}')>>tmp.txt
done
B=`sort -n -k2 tmp.txt | tail -n 5 | awk '{print$1}'`
for j in $B #获取错误代码及省份代码
do
code_group=`grep $j test.txt | awk '{print$2}'`
provinces_group=`grep $j test.txt | awk '{print$3}'`
codes=($code_group)
provinces=($provinces_group)
count=${#codes[@]}
for ((i=0;i<$count;i++))
do
echo "code: "${codes[$i]} && echo "provinces: "${provinces[$i]}
grep -w "${codes[$i]}" /wh_k/20180604.log | grep -w "${provinces[$i]}">>/wh_k/num/${provinces[$i]}.txt
done
echo "----------"
done
补充知识点
获取某一列中所有数的和
awk '{print $1}' | awk '{sum+=$1}END{print sum}'
第二列进行排序(默认升序,降序加r参数)
sort -n -k2
sort -nr -k2
定义数组
code_group=`grep $j test.txt | awk '{print$2}'`
codes=($code_group)
获取数组中元素的个数
count=${#codes[@]}
遍历数组中的元素
${codes[@]}
for循环
for ((i=0;i<$count;i++))
获取数组值,i表示位置
${codes[$i]}
精准匹配
grep -w
去#行显示
grep -V ^# (-V反选
匹配前后n行
grep -C n name /xx.log