Command
用於查看流中前 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
and完成此操作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