Nethogの解析
解析したい出力nethogs-d 1 -t次の形式で:
5.65273 767.912
14.2687 1681.15
19.9011 2309.54
最初(または2番目)の列は、次を示します。みんなマイコンピュータが送信(または受信)する1秒あたりのKB数。各行は1秒間隔で測定した値です(-D引数)。
これまで私の試み
実行して
sudo nethogs -d 1 -t
次のような生の出力を取得します。
Adding local address: 192.168.0.23
Adding local address: fe80::cb1b:6973:f77f:34
Ethernet link detected
Waiting for first packet to arrive (see sourceforge.net bug 1019381)
Refreshing:
unknown TCP/0/0 0 0
Refreshing:
/usr/lib/firefox/firefox/12576/1000 4.07988 543.749
/opt/google/chrome/chrome/2441/1000 1.57285 224.163
unknown TCP/0/0 0 0
Refreshing:
/usr/lib/firefox/firefox/12576/1000 11.9787 1330.22
/opt/google/chrome/chrome/2441/1000 2.26895 350.36
unknown TCP/0/0 0 0
Refreshing:
/usr/lib/firefox/firefox/12576/1000 17.6111 1958.61
/opt/google/chrome/chrome/2441/1000 2.26895 350.36
unknown TCP/0/0 0 0
コマンドを実行して
sudo nethogs -d 1 -t 2>&1 | sed '1,5d;/Refreshing:/d;s_\t_ _g'
次のように、よりきれいな出力を生成できました。
unknown TCP/0/0 0 0
/usr/lib/firefox/firefox/12576/1000 4.07988 543.749
/opt/google/chrome/chrome/2441/1000 1.57285 224.163
unknown TCP/0/0 0 0
/usr/lib/firefox/firefox/12576/1000 11.9787 1330.22
/opt/google/chrome/chrome/2441/1000 2.26895 350.36
unknown TCP/0/0 0 0
/usr/lib/firefox/firefox/12576/1000 17.6111 1958.61
/opt/google/chrome/chrome/2441/1000 2.26895 350.36
unknown TCP/0/0 0 0
今ここで目的の出力にどのように移動しますか?使ってみようアッ 次のように1つの測定結果を合計します。
sudo nethogs -d 1 -t 2>&1 | sed '1,5d;/Refreshing:/d;s_\t_ _g' | awk 'BEGIN{sent=0; recv=0;};{if (NF >= 2) sent+=$(NF-1); recv+=$NF;}; END{print sent, recv;};'
しかし、これは出力を生成しません。出力を入れることができます。sedファイルに入れて適用します。アッしかし、私はこれを行い、私が好む継続的な出力を提供するより直接的な方法があると思います。
答え1
スラッシュで始まる行を考えてみましょう。
$ awk '/^[/]/ { sent+=$(NF-1); recv+=$NF }
/^[^/]/ && sent>0 && recv>0 { print sent, recv; sent = recv = 0 }' file
5.65273 767.912
14.2477 1680.58
19.8801 2308.97
これは、スラッシュ文字で始まる行に追加するか、その行にsent
追加します。recv
スラッシュ文字で始まらない行が見つかると、現在累積されたsent
合計recv
値が出力されます(その後、ゼロにリセットされます)。変数に0より大きい値が含まれている場合にのみ出力が発生します。