스트림의 상위 N개 항목을 보기 위한 도구

스트림의 상위 N개 항목을 보기 위한 도구

다음 작업을 수행할 수 있는 기존 Linux 명령줄 도구를 찾고 있습니다.

/dev/inputstream다음과 같이 무한한 데이터 스트림을 생성하는 입력 스트림을 생각해 보세요 .

A
A
B
A
C
Z
A
.
.
.

노트:(각 줄은 알파벳 문자입니다.)

도구를 사용하는 방법은 다음과 같습니다.

cat /dev/inputstream | tool

이 도구의 출력은 "top" 명령의 출력과 유사해야 합니다. 자주 발생하는 상위 N개 항목이 지속적으로 업데이트되는 목록이어야 합니다.

예를 들어:

A -- 10 times
B -- 8 times
Z -- 7 times
C -- 2 times
D -- 1 time

스트림이 무한하지 않은 경우 sort및 를 사용하여 이를 수행 할 수 있습니다 uniq.

답변1

내 요구 사항에 완벽하게 맞는 도구를 찾았습니다.logtop. 문서에 따르면:

logtop표준 입력으로 수신된 문자열의 실시간 개수를 표시합니다.

서버에 IP가 너무 많은 경우와 같은 특정 상황에 유용합니다.

$ tail -f /var/log/apache2/access.log | cut -d' ' -f1 | logtop

또는 블로그에서 가장 인기 있는 게시물:

$ tail -f /var/log/apache2/access.log | cut -d' ' -f7 | grep article | logtop

페도라/센트OS/RHEL

애플리케이션에 대한 RPM을 찾을 수 없지만 수동으로 다운로드, 컴파일 및 설치하는 것은 매우 간단합니다. 컴파일하려면 2개의 종속성을 설치해야 합니다.

$ sudo yum install uthash ncurses-devel

Github에서 소프트웨어를 다운로드할 수 있습니다.

$ git clone https://github.com/JulienPalard/logtop.git

빌드하세요:

$ cd logtop
$ make

그런 다음 이 디렉토리에서 설치하거나 실행할 수 있습니다 ./logtop.

$ tr -dc 'A-Z' </dev/urandom | fold -w 1 | head -n 10MB | ./logtop
10000 lines, 10000.00 lines/s
RANK    CNT   LINE/S LINE                                                                                                                             
   1    428   428.00 T
   2    417   417.00 G
   3    416   416.00 S
   4    414   414.00 K
   5    413   413.00 Q
   6    412   412.00 E
   7    401   401.00 I

답변2

펄에서는:

perl -nle '
          $N = 5;      # Change as needed
          $freq{$_}++;
          if ( keys %freq >= $N ){
              @sorted = sort { $freq{$b} <=> $freq{$a} } keys %freq;
              for ( 0..$N-1){
                  $key = $sorted[$_];
                  print "$key -- $freq{$key} times";
              }
          }
          sleep 5;
          system(clear)
          ' < /dev/inputstream

관련 정보