나는 한 Apache
로그 파일, access.log
어떻게 그 파일에 선 발생 수를 계산하려면? 예를 들어, 결과는 cut -f 7 -d ' ' | cut -d '?' -f 1 | tr '[:upper:]' '[:lower:]'
이다
a.php
b.php
a.php
c.php
d.php
b.php
a.php
내가 원하는 결과는 다음과 같습니다.
3 a.php
2 b.php
1 d.php # order doesn't matter
1 c.php
답변
| sort | uniq -c
의견에 명시된 바와 같이.
출력을 파이핑하면 출력이 sort
알파벳 / 숫자 순서 로 구성됩니다.
이는 uniq
반복되는 라인에서만 일치 하기 때문에 요구 사항입니다.
a
b
a
uniq
이 텍스트 파일 을 사용 하면 다음을 반환합니다.
a
b
a
두 개의 행이 연속 된 행이 아닌 두 개의 행 a
으로 구분되어 있기 때문 b
입니다. 그러나 먼저 데이터를 알파벳 순서로 먼저 정렬하면
a
a
b
그런 다음 uniq
반복되는 줄을 제거합니다. -c
의 옵션 uniq
카운트 중복의 수와는 형태로 출력을 제공합니다 :
2 a
1 b
참고 문헌 :
답변
[your command] | sort | uniq -c | sort -nr
허용되는 답변이 거의 완성 sort -nr
되었습니다. 끝에 가장 추가되는 부분을 추가하여 가장 자주 나타나는 행으로 결과를 정렬 할 수 있습니다.
유니크 옵션 :
-c, --count
prefix lines by the number of occurrences
정렬 옵션 :
-n, --numeric-sort
compare according to string numerical value
-r, --reverse
reverse the result of comparisons
특별한 경우에 당신이 정렬 된 라인 번호는 사용할 필요가 됨 sort -gr
대신 sort -nr
참조 코멘트를
답변
awk 에서 연관 배열을 사용한 다음 선택적으로 sort 할 수 있습니다 .
cat access.log | awk ' { tot[$0]++ } END { for (i in tot) print tot[i],i } ' | sort
산출:
1 c.php
1 d.php
2 b.php
3 a.php