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

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

我认为我想做的事情很简单,但我找不到办法做到这一点:

如果我输入这个命令:

[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

我有很多 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

但仍然没有,我不想保存带有 tcpdump 输出的文件,然后进行计数,只需实时计算已经显示的输出行。

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

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

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

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

祝福大家。

答案1

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

显示计数:

tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
  awk '/Start/ {c++;print c} {}'

显示计数和行数:

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

在同一行显示计数:

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}'

相关内容