![성공한 쿼리의 비율을 계산하는 방법](https://linux55.com/image/79025/%EC%84%B1%EA%B3%B5%ED%95%9C%20%EC%BF%BC%EB%A6%AC%EC%9D%98%20%EB%B9%84%EC%9C%A8%EC%9D%84%20%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
아파치 로그에 성공한 쿼리의 비율을 계산하려고 합니다. 두 가지 명령이 있습니다.
cat access_log|cut -d' ' -f10|grep "2.."|wc -l
그리고
cat access_log|cut -d' ' -f10|wc -l
성공적인 쿼리 수와 총 쿼리 수를 반환합니다. 가능하다면 bash를 사용하여 성공적인 요청의 비율을 계산하고 싶습니다. 1줄 스크립트여야 합니다. 추가적인 정보 없이 -50이나 12와 같은 % 숫자만 출력된다고 가정합니다.
bc를 사용해 보았지만 지식 부족으로 실패했습니다. 누구든지 나를 도와줄 수 있나요?
답변1
이 시도:
echo $(( 100 * $( cut -d' ' -f10 access_log|grep "2.."|wc -l) / $(cut -d' ' -f10 access_log|wc -l) ))
Bash는 정수만 처리할 수 있습니다.
답변2
awk
로그 파일을 한 번만 사용 하고 반복하십시오.
awk '{if ((199 < $9) && ($9 < 300)) {SUMOK++} else {OTHER++}} END { printf "%d\n", ((SUMOK/NR)*100)}' access_log
답변3
이것을 시도해 볼 수 있습니다. $9를 상태 코드의 올바른 필드 번호로 바꾸십시오.
awk '{if ($9 == 200) no_of_200+=1 } END{ perc=(no_of_200/NR)*100; print perc}' access.log
답변4
sed -ne'\|^\([^ ]* *\)\{9\}2..|=;$=;$s|.*|2ksmzlm/p|'|dc
...일하다...
예를 들어:
printf %s\\n 1 2 3 4 5 6 7 8 9 10 |
sed -ne'/1/=;$=;$s|.*|2ksmzlm/p|p'|dc
.20
... sed
입력 라인의 20%와 일치하는 패턴을 표시합니다.1