Pra*_*ina 2 streaming top sort command
我正在寻找可以完成以下任务的现有 Linux 命令行工具:
考虑有一个输入流/dev/inputstream,它喷出无限的数据流,如下所示:
A
A
B
A
C
Z
A
.
.
.
Run Code Online (Sandbox Code Playgroud)
注意:(每一行是字母表中的一个字符)。
该工具以下列方式使用:
cat /dev/inputstream | tool
Run Code Online (Sandbox Code Playgroud)
该工具的输出应该类似于“top”命令中的输出。它应该是一个持续更新的前 N 个频繁出现项目的列表。
例如:
A -- 10 times
B -- 8 times
Z -- 7 times
C -- 2 times
D -- 1 time
Run Code Online (Sandbox Code Playgroud)
如果流不是无限的,我可以使用sortand完成此操作uniq。
我发现这个工具完全符合我的需要,称为logtop. 根据文档:
logtop显示在标准输入中收到的字符串的实时计数。
在某些情况下很有用,比如让 IP 淹没你的服务器:
$ tail -f /var/log/apache2/access.log | cut -d' ' -f1 | logtop
Run Code Online (Sandbox Code Playgroud)
或者你博客上最热门的文章:
$ tail -f /var/log/apache2/access.log | cut -d' ' -f7 | grep article | logtop
Run Code Online (Sandbox Code Playgroud)
我找不到此应用程序的 RPM,但手动下载、编译和安装非常简单。它确实需要安装 2 个依赖项才能编译它。
$ sudo yum install uthash ncurses-devel
Run Code Online (Sandbox Code Playgroud)
您可以从 Github 下载该软件:
$ git clone https://github.com/JulienPalard/logtop.git
Run Code Online (Sandbox Code Playgroud)
要构建它:
$ cd logtop
$ make
Run Code Online (Sandbox Code Playgroud)
然后,您可以从该目录安装或运行它,./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
Run Code Online (Sandbox Code Playgroud)