1秒あたりの現在の行数を取得する方法は?

1秒あたりの現在の行数を取得する方法は?

次のコマンドを使用してvoipトラフィックをtcpdumpします。

tcpdump -nn  port 5060  -i eth0 | grep 'xxx.xxx.xxx.xxx.5060: SIP: SIP/2.0 5'

そして次のようなものが得られます:

11:10:03.600493 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:03.610092 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:03.860551 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:04.190145 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 504 Server Time-out
11:10:04.510174 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:04.870164 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:06.010196 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:07.039787 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 503 Service Unavailable
11:10:07.330243 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:08.520721 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:08.720207 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 503 Service Unavailable

現在の秒の対応する行数をリアルタイムでどのように取得できますか?つまり、11:10:08の場合は2を取得します。

ベストアンサー1

元の投稿で述べたライブソリューションです。

次のコードをスクリプトとして保存し、実行可能にします。

#!/bin/bash

current_sec=0
while read line
do
    prev_sec=$current_sec
    current_sec=${line:0:8}
    if [ "$current_sec" == "$prev_sec" ]
    then
        line_count=$((line_count+1))
    else
        echo $prev_sec /// $line_count
        line_count=1
    fi
done

次に、次を実行します。

tcpdump -nn  port 5060  -i eth0 | grep 'xxx.xxx.xxx.xxx.5060: SIP: SIP/2.0 5' | saved_script.sh

リアルタイムで印刷されます。

13:29:50 /// 0
13:29:51 /// 4
13:29:52 /// 9
13:29:54 /// 2

このコードは十分にテストされておらず、バグがあるかもしれませんが、直接テストできます。

おすすめ記事