实时计算另一个输出命令的输出行数

Car*_*los 3 shell tcpdump

我想我想做的很容易,但我找不到办法做到这一点:

如果我把这个命令:

[root@:Active] tmp # tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v
-X | grep -o 'Start'
Start
Start
...
...
...
Start
Start
10047 packets captured
10046 packets received by filter
0 packets dropped by kernel
Run Code Online (Sandbox Code Playgroud)

我有很多 Start 巧合,但我只想计算 shell 中实际显示的“Start”数量(同时 tcpdump 命令正在运行)。

我尝试添加 wc -l:

[root@:Active] tmp # tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v
-X | grep -o 'Start' | wc -l
tcpdump: listening on any, link-type EN10MB (Ethernet), capture size 65535 bytes
Run Code Online (Sandbox Code Playgroud)

但是还是什么都没有,我不想用tcpdump的输出保存一个文件然后计数,只是实时计算已经显示的输出行。

我也尝试了一些与 xargs 的组合,但仍然无法计数。我认为 "wc -l" "grep -c" 和类似的命令需要一个文件来指向和计数,但我不知道 tcpdump 的输出存储在内存中的哪个位置。

如果您有任何聪明的想法将不胜感激:D。

我仍然认为我遗漏了一些愚蠢的东西,这些行已经显示在 shell 中,我只需要计算它们有多少,而无需保存任何文件或停止 tcpdump。

同时我会继续尝试,一些朋友告诉我用 AWK 语言我可以做到这一点。

祝福大家。

Arc*_*ege 5

您似乎想要计数而不是“开始”输出。

改为显示计数:

tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
  awk '/Start/ {c++;print c} {}'
Run Code Online (Sandbox Code Playgroud)

显示计数和行数:

tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
  awk '/Start/ {c++; print c, $0} {}'
Run Code Online (Sandbox Code Playgroud)

在同一行显示计数:

tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
  awk '/Start/ {c++; printf "\r%d", c} {} END {print}'
Run Code Online (Sandbox Code Playgroud)