要求:取出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
#循环完成