定位分析脚本

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