Command

用於查看流中前 N 個項目的工具

  • May 15, 2014

我正在尋找可以完成以下任務的現有 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

如果流不是無限的,我可以使用sortand完成此操作uniq

我發現這個工具完全符合我的需要,叫做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/CentOS/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

引用自:https://unix.stackexchange.com/questions/129568