解析 nethogs

解析 nethogs

解析 nethogs

我正在尝试解析的输出nethogs-d 1 -t为以下格式:

5.65273 767.912
14.2687 1681.15
19.9011 2309.54

其中第一(或第二)列代表全部的我的机器发送(或接收)的 KB/秒数。每条线都是以 1 秒的间隔进行的测量(-darg)。

到目前为止我的尝试

通过跑步

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

现在我该如何从这个转到我想要的输出?我尝试使用awk 像这样对一次测量的输出求和

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在文件中然后应用awk对于每个段落,但我觉得有一种更直接的方法可以做到这一点,并且可以为我提供我更喜欢的连续输出。

答案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

这只是添加到以斜杠字符开头的行sentrecv从以斜杠字符开头的行添加。当遇到不以斜杠字符开头的行时,将输出当前累加的sentrecv值(然后重置为零)。仅当变量包含大于零的值时才会发生输出。

相关内容