天天看點

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

繼續閱讀