天天看点

shell 脚步分析数据

开始尝试用shell 脚步分析软件输出数据

#!/bin/sh

:<<!
  input file  n : difference device file compare 
        e : same device file compare
!
device=$1   

log_file_a=$2
log_file_b=$3

#convert file 
dos2unix $log_file_a
dos2unix $log_file_b

#judge file 
if [ n == $device ] || [ e == $device ];then
  if [ ! -f "$log_file_a" ];then
    echo -e "no input compare file param1!\c";exit 2
  else
    if [ ! -f "$log_file_b" ];then
      echo -e "no input compare file param2!\c";exit 2
    fi
  fi
else
  echo -e "shell Usage error ! \c";exit 2
fi

#record last find success line
last_condition=0

#multiple start time must record line
multi_line=0
line=1;last_line=0;last_line_tmp=0

count_num=0
condition=0

if [ e == $device ]
then
  OAR_Line=$(awk '{print NR}' $log_file_b | tail -1)

  cat $log_file_a | while read GAS_time
  do
    let count_num++
    if (( $count_num%100 == 0 ));then
      echo " handle alarm $count_num"
    fi
    
    GAS_time=$(echo ${GAS_time##*G:})
    GAS_time_s=$[GAS_time+1]
    #echo $GAS_time
    
    stime=0;etime=0;GAS_time_e=0
    if [ 1 == condition ];then
      line='expr $line - 1'
      if [ 0 -ne multi_line ];then
        line='expr $last_line - $multi_line'
        multi_line=0
      fi
    else
      line=1
    fi
    condition=0

    while [ $line -le $OAR_Line ]
    do  
      if [ 1 == line ]
      then
        stime=$(awk 'NR=='$line' {print $0}' $log_file_b)
        #stime=$(sed -n ''$line'p' $log_file_b)
      else
        while [ $line -ge 3 ]
        do
          stime=$(sed -n ''$line'p' $log_file_b)
          if [[ "$stime" =~ "S=" ]]
          then
            let last_line_tmp=line-1
            etime_tmp=$(sed -n ''$last_line_tmp'p' $log_file_b)
            if [[ "$etime_tmp" =~ "E=" ]]
            then
              break
            else
              let line--
              continue
            fi
          else
            let line--
            continue
          fi
        done
      fi
      stime=$(echo ${stime##*S=})     
      [ ! $stime = ~^[0-9] ] || echo -e "GAS_time:$GAS_time    GAS_time_s:$GAS_time_s     stime:$stime \c"
      
      let line++
      etime=$(sed -n ''$line'p' $log_file_b)
      while [ $line -le $OAR_Line ];do
        if [[ "$etime" =~ "E=" ]]
        then
          #echo $etime
          break
        else
          let multi_line++
          let line++
          etime=$(sed -n ''$line'p' $log_file_b)
        fi
      done

      etime=$(echo ${etime##*E=})
      #GAS_time=$[GAS_time+1]
      let GAS_time_e=GAS_time+8
      #echo "GAS_time_e:$GAS_time_e     stime:$stime     etime:$etime "
      #if [ 1488870848 = $GAS_time ];then
      # echo "GAS_time:$GAS_time    GAS_time_s:$GAS_time_s    GAS_time_e:$GAS_time_e   stime:$stime     etime:$etime "
      #fi
      [ ! $etime = ~^[0-9] ] || echo -e "GAS_time:$GAS_time    GAS_time_s:$GAS_time_s    GAS_time_e:$GAS_time_e   stime:$stime     etime:$etime \c"
      
      if [ $GAS_time_s -ge $stime ];then
        if [ $GAS_time_e -lt $etime ];then
          condition=1
          last_line=$line
          break
        fi
      fi
      let line++  
    
    done
    
    if [ 0 -eq $condition ];then
      echo -e " ***   error   ***: \c";echo "GAS_time:$GAS_time GAS_time_e:$GAS_time_e   stime:$stime     etime:$etime "
    fi
  done

elif [ n == $device ]
then
  line_num_b=$(awk '{print NR}' $log_file_b | tail -1)
  
  cat $log_file_a | while read time_a
  do
    bequal=0;line_b=1
    
    old_time_a=$time_a
    new_time_a=$(echo ${time_a##*G:})
    while [ $line_b -le $line_num_b ];do
      time_b=$(sed -n ''$line_b'p' $log_file_b)
      time_b=$(echo ${time_b##*G:})

      if [ $new_time_a -eq $time_b ];then
        bequal=1
        break;
      fi
      line_b=`expr $line_b + 1`
    done

    if [ 0 -eq $bequal ];then
      echo " error    in another file no find : $old_time_a"
    fi
  done
else
  echo -e "shell fisrt praram error ! \c";exit 2
fi