日志文件如下:-
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
文件继续如此。
问题:
- 查找状态为 FAIL 的 IP?
- 查找状态为“成功”的所有请求所花费的平均时间?
- 列出通过移动设备登录的次数以及花费了多长时间?
答案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