각 API 버전이 로그 파일에 나타나는 횟수를 계산합니다. [닫기]

각 API 버전이 로그 파일에 나타나는 횟수를 계산합니다. [닫기]

포트 33001의 localhost로부터 데이터를 수신하고 다양한 API 버전이 요청된 횟수를 찾아 화면에 인쇄하는 스크립트를 개발하십시오.

예시 로그는 다음과 같습니다:

172.32.11.121 736443 /api/2.3
98.134.54.184 182294 /api/2.3
172.32.11.121 736443 /api/2.3/security
203.44.122.18 397832 /api/3.0
172.32.11.121 736443 /api/2.3
98.134.54.184 182294 /api/3.0
172.32.11.121 736443 /api/2.3/logging
172.32.11.121 736443 /api/2.3
71.11.139.205 291187 /api/2.3
172.32.11.121 736443 /api/3.0/security
98.134.54.184 182294 /api/2.3
71.11.139.205 397832 /api/3.0/logging

첫 번째 필드는 IP 주소, 두 번째 필드는 사용자 ID, 마지막 필드는 리소스 경로입니다.

답변1

파일의 데이터를 가정합니다 indata.

$ awk '{ ++c[$NF] } END { for (i in c) print c[i], i }' indata
1 /api/2.3/logging
1 /api/3.0/security
6 /api/2.3
2 /api/3.0
1 /api/3.0/logging
1 /api/2.3/security

스크립트 awk는 마지막 열의 데이터가 표시되는 횟수를 추적하고 끝에 이 정보의 요약을 인쇄합니다.

버전만 가져오기숫자, 사용 -F '/'하고 $NF로 바꾸십시오 $3.

또는:

$ cut -d ' ' -f 3 indata | sort | uniq -c
   6 /api/2.3
   1 /api/2.3/logging
   1 /api/2.3/security
   2 /api/3.0
   1 /api/3.0/logging
   1 /api/3.0/security

이렇게 하면 데이터에서 공백으로 구분된 세 번째 열이 제거되고 정렬됩니다. uniq -c그런 다음 각 고유 항목의 발생 횟수를 계산합니다.

이 변형의 버전 번호만 얻으려면 -d ' '호출에서 로 바꾸세요.-d '/'cut

답변2

전체 경로가 아닌 버전에만 관심이 있다고 가정합니다.

$ awk -F/ '{count[$3]++} END {for (v in count) print v, count[v]}' file
2.3 8
3.0 4

분할의 필드인 /버전 번호는 모든 행의 세 번째 필드인 것 같습니다.

관련 정보