줄 발생 수 정렬 및 계산 그 파일에

나는 한 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