nethogs 是一个linux进程带宽监控工具。https://github.com/raboof/nethogs
网络猪-t
它的输出看起来像这样。
Refreshing:
sshd: root@pts/0/4002/0 0.185156 0.0773437
unknown TCP/0/0 0 0
Refreshing:
sshd: root@pts/0/4002/0 0.220703 0.0902344
unknown TCP/0/0 0 0
Refreshing:
sshd: root@pts/0/4002/0 0.217578 0.0902344
unknown TCP/0/0 0 0
我正在尝试用 awk 解析它的输出。
nethogs -t | awk {'print $0}'
没有返回任何输出 :-(
nethogs -t | awk {'readline tmp; print tmp}'
几乎相同 ;
我推测这是 nethogs 缓冲其输出的方式,或者是它写入输出的其他一些奇怪方式。
nethogs -t | awk -W interactive '{print $2}'
我得到了一些输出,但它没有按预期工作。
我曾尝试使用 awk 的 RS 和 FS 设置,但没有成功。
答案1
我试图重现该问题,但至少在终端上无法重现(在我的情况下,awk
按预期打印了这些行),所以这只是一个猜测。
您可以尝试通过从 shell 逐行读取输出来避免缓冲,如下所示:
while read line; do
# Do some real processing here
# instead of the echo
echo "-> $line"
done < <(nethogs -t)
答案2
我不熟悉 nethogs,但我会检查一下。一个想法是,尝试将 sterr 重定向到 stdout,如下所示。
nethogs -t 2>&1 | awk {'print $0}'