我认为我想做的事情很简单,但我找不到办法做到这一点:
如果我输入这个命令:
[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}'