ストリームの上位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

Fedora/セント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

おすすめ記事