リアルタイムで他の出力コマンドの出力ライン数を計算します。

リアルタイムで他の出力コマンドの出力ライン数を計算します。

私がやりたいことは簡単だと思いますが、そうする方法が見つかりません。

このコマンドを入力すると:

[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

私は多くの開始偶然の一致を持っていますが、(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。

私はまだ何か愚かなものを見逃していると思います。この行はすでにシェルに表示されており、ファイルを保存したり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}'

関連情報