shell与awk的脚本运用(三)

版权声明: https://blog.csdn.net/wojiuwangla/article/details/81481320

要求:取出log中最后以GG结尾,并且下一行的ip字段是否包含aaaa,这两行必须是同一个人,然后将这两行的指定信息输出到最终文件中。

#!/bin/bash
#脚本声明

file=`ls *.LOG`
#列出所有log文件
a=0
#定义变量a的值为0,待会作为下一行的行号

for log in $file
#循环每一个log文件
do
#进入循环
   line_num=`awk 'END{print NR}' $log`
   #获取当前log文件最后一行的行号
   for i in `seq $line_num`
   #循环每一行,从第一行开始
   do
   #进入循环
      a=$(expr $i + 1) 
      #a的值为当前行号加1,也就是下一行的行号
      zuihou=`cat $log|awk -v bl=$i -F'|' 'NR==bl{print $15}'`
      #定义当前行的最后一个值
      ip=`cat $log|awk -v bl=$i -F'|' 'NR==bl{print $12}'|awk -F':' '{print $3}'`
      #定义当前行的ip
      name=`cat $log|awk -v bl=$i -F'|' 'NR==bl{print $6}'`
      #定义当前行的姓名值
      input_line_1=`cat $log|awk -v bl=$i -F'|' 'NR==bl{print $6,$7}'`
      #定义待会要输入到最终文件的信息

      if [[ $zuihou -eq GG ]];then
        #判断当前行的最后一个值是不是等于GG

        if [[ $ip != "aaaa" ]];then
           #如果是,再判断ip那一列是不是没有aaaa
           next_line=`cat $log|awk -v bl=$a 'NR==bl{print $0}'`
           #定义当前行的下一行的整行数据
           input_line_2=`cat $log|awk -v bl=$a -F'|' 'NR==bl{print $6,$7}'`
           #定义下一行要输出到最终文件的数据
           name_2=`cat $log|awk -v bl=$a -F'|' 'NR==bl{print $6}'`
           #定义下一行的姓名值
       value=`echo $next_line|grep 'aaaa'`    
           #定义当前行是否包含aaaa,如果是输出的整行,如果不是则是空值   

           if [[ ! $value ]];then
           # 进行判断,判断value是不是空值
                echo $next_line
                #输出下一行整行(用来检查脚本有误问题)
            echo 'pass................'
                #输出pass,结束判断
           elif [[ $name == $name_2 ]];then
           #如果不是空值,判断当前行和下一行的姓名是否一样
                echo "input................."
                #输出input,然后开始写入
                echo $i >> /tmp/test/zuizhong.txt
                #输出行号到zuizhong.txt文件中,用来检查脚本是否正常
                echo $input_line_1 >> /tmp/test/zuizhong.txt
                #输出当前行所需字段到zuizhong.txt中
                echo $input_line_2 >> /tmp/test/zuizhong.txt
                #输出下一行所需字段到zuizhong.txt中
           fi
           #结束判断
      fi
      #结束判断
    fi
    #结束判断
   done
   #本次循环完成
done
#循环完成
 

猜你喜欢

转载自blog.csdn.net/wojiuwangla/article/details/81481320