문제

각 HTTP 요청의 타임 스탬프가 포함 된 서버 액세스 로그가 있습니다. 매 초마다 요청 수의 수를 얻고 싶습니다. 사용 sed, 그리고 cut -c, 지금까지 나는 파일을 다음과 같은 타임 스탬프로 줄일 수있었습니다.

22-SEP-2008 20:00:21 +0000
22-SEP-2008 20:00:22 +0000
22-SEP-2008 20:00:22 +0000
22-SEP-2008 20:00:22 +0000
22-SEP-2008 20:00:24 +0000
22-SEP-2008 20:00:24 +0000

내가 얻고 싶은 것은 각 고유 한 타임 스탬프가 파일에 나타나는 횟수입니다. 예를 들어 위의 예제에서는 다음과 같은 출력을 얻고 싶습니다.

22-SEP-2008 20:00:21 +0000 : 1
22-SEP-2008 20:00:22 +0000 : 3
22-SEP-2008 20:00:24 +0000 : 2

나는 사용했다 sort -u 타임 스탬프 목록을 고유 한 토큰 목록으로 필터링하려면 Grep Like를 사용할 수 있기를 바라고 있습니다.

grep -c -f <file containing patterns> <file>

그러나 이것은 단지 총 1 줄의 일치 라인을 생성합니다.

나는 이것이 단일 줄로 수행 될 수 있고 몇 개의 유틸리티를 함께 묶을 수 있다는 것을 알고 있습니다. 그러나 나는 그것을 생각할 수 없습니다. 누구든지 아는가?

도움이 되었습니까?

해결책

나는 당신이 찾고 있다고 생각합니다

uniq --count

-C, -발생 수에 따른 수사 접두사 라인

다른 팁

연관 배열과 함께 AWK를 사용하는 것은 이와 같은 것에 대한 또 다른 솔루션 일 수 있습니다.

원래 지정 한 형식의 출력을 원하는 경우 (끝에 발생한 수) :

uniq -c logfile | sed 's/\([0-9]+\)\(.*\)/\2: \1/'

사용 어색한:

cat file.txt | awk '{count[$1 " " $2]++;} \
                    END {for(w in count){print w ": " count[w]};}'

Tom의 해결책 :

awk '{count[$1 " " $2]++;} END {for(w in count){print w ": " count[w]};}' file.txt

보다 일반적으로 작동합니다.

내 파일은 정렬되지 않았습니다.

name1 
name2 
name3 
name2 
name2 
name3 
name1

따라서 발생은 서로를 따르지 않았습니다 uniq 주신대로 작동하지 않습니다.

1 name1 
1 name2 
1 name3 
2 name2 
1 name3 
1 name1

그러나 awk 스크립트와 함께 :

name1:2 
name2:3 
name3:2

Xargs를 사용합니까? 여기에서 내 머리에 모든 것을 정리할 수는 없지만, 각각의 고유 한 초에 대해 원본 파일을 녹음하고 WC -L을 수행하여 숫자를 얻을 수 있도록 정렬에 Xargs를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top