nethogs -t | awk '{print $0}' 无输出

nethogs -t | awk '{print $0}' 无输出

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}'

相关内容