로그 파일은 다음과 같습니다:-
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 사용단락 모드(레코드 구분 기호를 설정 해제하여) 및 (개행)을 사용하여 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