将shell脚本写入分析日志文件

将shell脚本写入分析日志文件

日志文件如下:-

Source=Mobile
IP=189.23.45.01
STATUS=SUCCESS
TIME=10 sec

Source=Desktop
IP=189.23.34.23
STATUS=FAIL
TIME=101 sec

Source=Mobile
IP=189.23.34.23
STATUS=FAIL
TIME=29 sec

文件继续如此。

问题:

  1. 查找状态为 FAIL 的 IP?
  2. 查找状态为“成功”的所有请求所花费的平均时间?
  3. 列出通过移动设备登录的次数以及花费了多长时间?

答案1

你确实问了 3 个问题 - 我将从第一个问题开始,你应该努力使用相同的基本结构自己解决其他两个问题(这个网站上有很多使用 Awk 的示例)数值处理,例如平均):

使用 awk 中段落模式(通过取消设置记录分隔符),使用and (换行符)RS将记录拆分为字段:=\n

$ awk -vRS= -F'[=\n]' '/STATUS=FAIL/{print $4}' file.log
189.23.34.23
189.23.34.23

答案2

在未完善的版本中,Bash 脚本可能如下所示,假设您的数据包含在datafile

#!/bin/bash

printf "IPs where status is fail:\n"
grep -z -oP 'IP=\K.*\n(?=STATUS=FAIL)' datafile

printf "Avg time taken by all requests where status is 'success':\n"
grep -z -oP 'STATUS=SUCCESS\nTIME=\K\d+' datafile | \
  awk '{ total += $1; count++ } END { print ( count == 0 ? "NaN" : total/count); }'

printf "Number of logins (successful and failed) via Mobile:\n"
grep -c 'Source=Mobile' datafile

简要说明:

  • Q2)平均时间的计算:该grep命令提取时间值(假设全部以秒为单位)。这些值通过管道传输到awk命令中,命令计算它们的平均值,然后打印该平均值。

答案3

read -p "Lets Give File Name , placed in the same dir: " file ; 
echo " Ques : Find the Number of IP which failed "
echo "Ans: "

cat "${file}".txt | grep -i STATUS=FAIL -B1 | grep -i IP | awk -F '=' '{print $NF}'
#cat "${file}".txt | grep -i STATUS=SUCCESS -A1 | grep -i Time | awk -F '=' '{print $NF}' &> clear2.txt

echo "Ques : Find the avg of success time"
echo "Ans : "

cat "${file}".txt | grep -i STATUS=SUCCESS -A1 | grep -i Time | awk -F '=' '{print $2}' | awk '{print $1}' &> clear2.txt
avgtime=0
i=0
for x in `cat clear2.txt`
do  
    i=$(($i + 1))
    avgtime=$(($avgtime +$x))
    echo "avg time after ${i} iteration is :${avgtime}"
    y=$(($x))
done
#echo "${x}"
#echo "${y}"
avgtime=$(($avgtime/$i))

echo "THe avg time is : ${avgtime}"

echo "Ques : What is the Number of time mobile was tried to login"

echo "Ans :"

cat testfile.txt | grep -i Mobile | wc -l

相关内容