天天看点

linux Shell脚本匹配日志

业务需求:

1、找出承保成功的投保请求报文

readfile.sh 内容如下

#!/bin/bash

num=1 ##计数器

while read line

do

TODAY=`date "+%Y-%m-%d %H:%M:%S"`

##echo $TODAY

echo "-----$TODAY-----第$num个保单号:$line"

echo "-----$TODAY-----第$num个保单号:$line" >>/picclife/zhanglw/findlog1

##文件

filename="nohup201701051.log"

exitfile='/picclife/zhanglw/exists/' ##文件夹

guid=`grep "${line}" $filename |grep '承保成功' |grep 'TransRefGUID' |sed -nr '/<TransRefGUID>.*<\/TransRefGUID>/s_.*<TransRefGUID>([^<]*)</TransRefGUID>.*_\1_p'`

echo "交易号:$guid" >>/picclife/zhanglw/findlog1

if [ $guid ];then

##查找出现交易流水号的前后200行 生成一个文件

grep -C200 "$guid" $filename >$exitfile$line.log

##在生成的文件中找到交易流水号首次出现的行

guidline=`grep -n $guid $exitfile$line.log |head -1|awk -F: '{print $1}'`

if [ $guidline ];then

sed -n "${guidline},~3p" $exitfile$line.log| grep ">Trial<"| grep 'tc="1"' >/dev/null

if [ 0 -eq $? ];then

echo "核保请求,承保请求在同一个日志中" >>/picclife/zhanglw/findlog1

##过滤掉核保的请求报文

guidlineV=`grep -n $guid $exitfile$line.log |tail -3 |head -1| awk -F: '{print $1}'`

flagNum=$[guidlineV-4] ##找到了行号减4行,移动到请求报文开头

else

   ##没有核保就不用过滤

flagNum=$[guidline-4] ##找到了行号减4行,移动到请求报文开头

fi

echo "存在于文件==$filename" >>/picclife/zhanglw/findlog1

sed -n "${flagNum},/^<\/TXLife>/p" $exitfile$line.log > $exitfile$line.xml

echo $line >> $exitfile''findPolicyNum1 ##记录下来,后续和总数对比,再找出无法找到的保单

else

##echo "***************************>" >>/picclife/zhanglw/findlog1

echo "*****不存在于文件==$filename" >>/picclife/zhanglw/findlog1

fi

else

##echo "-------------------------->" >>/picclife/zhanglw/findlog1

echo "-----不存在于文件==$filename" >>/picclife/zhanglw/findlog1

fi

num=$((num+1))

done < $1

具体使用

-rw-r----- 1 weblogic bea      1616 02-11 10:59 101.txt

drwxr-x--- 2 weblogic bea     12288 02-11 11:46 exists

-rw-r--r-- 1 weblogic bea     30856 02-11 11:46 findlog1

-rw------- 1 weblogic bea     17553 02-11 11:46 nohup.out

-rw------- 1 weblogic bea 703135661 02-11 11:22 nohup.out8001

-rw------- 1 weblogic bea 481381139 02-11 11:22 nohup.out8002

-rwxr-xr-- 1 weblogic bea      1996 2017-09-13 readfile1.sh

执行命令:nohup ./readfile1.sh 101.txt nohup.out8001 &

打印出的日志

[[email protected] grepbaowen]$ tail -f nohup.out

-----2018-02-11 11:46:37-----第92个保单号:007699911314158

-----2018-02-11 11:46:37-----第93个保单号:007699911528158

-----2018-02-11 11:46:38-----第94个保单号:007699916266158

-----2018-02-11 11:46:39-----第95个保单号:007699919282158

-----2018-02-11 11:46:40-----第96个保单号:007699920362158

-----2018-02-11 11:46:41-----第97个保单号:007699921014158

[[email protected] grepbaowen]$ more findlog1 

-----2018-02-11 11:38:28-----第1个保单号:007699879947158

交易号:

-----不存在于文件==nohup.out8001

-----2018-02-11 11:38:28-----第2个保单号:007699876503158

交易号:

-----不存在于文件==nohup.out8001

匹配到的文件

[[email protected] grepbaowen]$ ls exists/

007699866793158.log  007699882642158.log  007699890182158.log  007699896224158.log  007699905603158.log

007699866793158.xml  007699882642158.xml  007699890182158.xml  007699896224158.xml  007699905603158.xml

继续阅读