shell與awk的指令碼運用(三)
要求:取出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
#迴圈完成